У меня есть простая консольная программа .NET, которая использует OdbcDataReader для извлечения строк с Advantage Local Server.
Я использую Системный DSN, определенный через Администратор ODBC на Windows 7.
Источник данных использует драйвер Advantage StreamlineSQL ODBC v 10.00.00.03 и следующие параметры:
- Путь к базе данных:
- Тип стола: преимущество доступно
- Типы серверов: локальный сервер (ALS)
Программа работает нормально, пока не встретит строку, имеющую значение NULL в столбце.
Затем я получаю исключение:
System.InvalidOperationException was caught Message=Internal .Net Framework Data Provider error 30. Source=System.Data StackTrace:
at System.Data.ProviderBase.DbBuffer.Validate(Int32 offset, Int32 count)
at System.Data.ProviderBase.DbBuffer.PtrToStringUni(Int32 offset, Int32 length)
at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
at System.Data.Odbc.OdbcDataReader.IsDBNull(Int32 i)
at OdbcTest.Program.Main(String[] args) in c:\abcoa\visual studio 2010\Projects\OdbcTest\OdbcTest\Program.cs:line 66 InnerException:
Intellisence в VS2010 также дает следующую подсказку:
* _COMPlusExceptionCode = -532462766 *
Я также включил трассировку ODBC и вижу следующую ошибку в SQL.LOG:
OdbcTest.vshost b34-11e4 EXIT SQLSetStmtAttrW with return
code -1 (SQL_ERROR)
SQLHSTMT 0x0037C6D8
SQLINTEGER 1228 <unknown>
SQLPOINTER [Unknown attribute 1228]
SQLINTEGER -5
DIAG [HY092] [iAnywhere Solutions][Advantage ODBC
Driver]Invalid attribute identifier. (2184)
OdbcTest.vshost b34-11e4 ENTER SQLGetDiagFieldW
SQLSMALLINT 3
SQLHANDLE 0x0037C6D8
SQLSMALLINT 1
SQLSMALLINT 4
SQLPOINTER 0x05ABE480
SQLSMALLINT 12
SQLSMALLINT * 0x05ABE548
Если кто-то может помочь с этим, я был бы очень признателен!