У тебя embedded какой сборки ? Альфа1 небось ?
Свежий снапшот возьми
У меня не эмбеддед. У меня обычный сервер (снапшот вчера брали или
позавчера). Я из него скопировал fbclient.dll и переименовал её в
fbembed.dll
Продебажили. Имеем вот что:
1) Ошибка на второй итерации цикла while в этом методе (строка помечена):
protected DbStatementType ParseStatementTypeInfo(byte[] buffer)
{
DbStatementType stmtType = DbStatementType.None;
int pos = 0;
int length = 0;
int type = 0;
while ((type = buffer[pos++]) != IscCodes.isc_info_end)
{
>>>> length = IscHelper.VaxInteger(buffer, pos, 2);
pos += 2;
switch (type)
{
case IscCodes.isc_info_sql_stmt_type:
stmtType =
(DbStatementType)IscHelper.VaxInteger(buffer, pos, length);
pos += length;
break;
default:
pos += length;
break;
}
}
return stmtType;
}
-----------------------------------------------------------------------------
2) Значения локальных переменных:
+ this {FirebirdSql.Data.Client.Embedded.FesStatement}
FirebirdSql.Data.Common.StatementBase
{FirebirdSql.Data.Client.Embedded.FesStatement}
- buffer {Dimensions:[8]} byte[]
[0] 21 byte
[1] 4 byte
[2] 0 byte
[3] 1 byte
[4] 0 byte
[5] 0 byte
[6] 0 byte
[7] 0 byte
stmtType Select FirebirdSql.Data.Common.DbStatementType
pos 8 int
length 4 int
type 0 int
-----------------------------------------------------------------------------
3) Само исключение внутри этого метода:
public static int VaxInteger(byte[] buffer, int index, int length)
{
int newValue;
int shift;
try
{
newValue = shift = 0;
int i = index;
while (--length >= 0)
{
>>>> newValue += (buffer[i++] & 0xff) << shift;
shift += 8;
}
}
catch (Exception e)
{
throw;
}
return newValue;
}
-----------------------------------------------------------------------------
4) Локальные переменные:
- buffer {Dimensions:[8]} byte[]
[0] 21 byte
[1] 4 byte
[2] 0 byte
[3] 1 byte
[4] 0 byte
[5] 0 byte
[6] 0 byte
[7] 0 byte
index 8 int
length 1 int
i 8 int
newValue 0 int
shift 0 int
Там как видишь значение i уже больше чем может быть.