检查列IsDBNull时是否抛出ODBCException

时间:2013-02-06 04:04:40

标签: sql-server-2008 c#-4.0 odbc

我正在编写一个程序,从一个数据库中读取数据,以便在另一个数据库中插入/更新。部署时,源数据库将是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有关,我不认为他们的工作会适用。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我没有找到这个问题的答案,但能够解决它。

减少一次处理的数据量似乎可以避免触发错误。对于我转移的大多数表格,我一次可以做20,000行。其中两个表必须处理10,000个行块。它真正遇到麻烦的一个表必须以1000行的块进行处理。