0

あるデータベースからデータを読み取り、別のデータベースに挿入/更新するプログラムを作成しています。ソース データベースはデプロイ時に DB2 になりますが、現時点では SQL Server 2008 R2 のコピーを使用して開発しています。

SQL Server 用の ODBC ドライバー 11 を使用してデータを読み取っていますが、異常な例外が発生しています。

私のコードは次のとおりです。

public static string ReadShortODBCColumn(OdbcDataReader reader, string columnName) 
{    
    int column = reader.GetOrdinal(columnName);
    return reader.IsDBNull(column) ? (short)0 : reader.GetInt16(column);
}

出力されている例外は次のとおりです。

2013-02-06 13:09:16.7834  System.Data.Odbc.OdbcException (0x80131937)
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype, Int32 cb, Int32& cbLengthOrIndicator)
at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype)
at System.Data.Odbc.OdbcDataReader.internalGetInt16(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 ProcessEngine.Business.Utilities.ReadShortODBCColumn(OdbcDataReader reader, String columnName)

しかし、取得されたデータを見ると、列は null ではなく、まったく正常に見えます。私がオンラインで見つけることができた唯一の同様の状況はSSISに関連しており、彼らの回避策は適用されないと思います。

誰にもアイデアはありますか?

4

1 に答える 1

0

この問題に対する答えは見つかりませんでしたが、回避することができました。

一度に処理するデータの量を減らすと、バグのトリガーを回避できるようです。私が転送していたほとんどのテーブルでは、一度に 20,000 行を処理できました。2 つのテーブルは、10,000 行のチャンクで処理する必要がありました。実際に問題があった 1 つのテーブルは、1000 行のチャンクで処理する必要がありました。

于 2013-03-04T04:52:58.070 に答える