OdbcDataReader を使用して Advantage Local Server から行をフェッチする単純な .NET コンソール プログラムがあります。Windows 7 の ODBC アドミニストレーターで定義されたシステム DSN を使用しています。データ ソースは、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:
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
誰かがこれを手伝ってくれるなら、私はとても感謝しています!