我有一個OdbcDataReader從數據庫獲取數據並返回一組記錄。IDataRecord.IsDBNull導致System.OverflowException(算術溢出)
執行查詢的代碼如下所示:
OdbcDataReader reader = command.ExecuteReader();
while (reader.Read())
{
yield return reader.AsMovexProduct();
}
該方法返回一個自定義類型(MovexProduct
)的IEnumerable。從IDataRecord到我的自定義類型MovexProduct皈依發生延伸 - 方法,看起來像這樣(縮寫):
public static MovexProduct AsMovexProduct(this IDataRecord record)
{
var movexProduct = new MovexProduct
{
ItemNumber = record.GetString(0).Trim(),
Name = record.GetString(1).Trim(),
Category = record.GetString(2).Trim(),
ItemType = record.GetString(3).Trim()
};
if (!record.IsDBNull(4))
movexProduct.Status1 = int.Parse(record.GetString(4).Trim());
// Additional properties with IsDBNull checks follow here.
return movexProduct;
}
只要我打的if (!record.IsDBNull(4))
我得到異常信息的發生OverflowException「算術運算導致溢出。「
堆棧跟蹤: System.OverflowException was unhandled by user code Message=Arithmetic operation resulted in an overflow. Source=System.Data StackTrace: at System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i) at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) at System.Data.Odbc.OdbcDataReader.IsDBNull(Int32 i) at JulaAil.DataService.Movex.Data.ExtensionMethods.AsMovexProduct(IDataRecord record)
[...]
我以前從來沒有遇到過這個問題,我想不通爲什麼我得到它。我已驗證記錄存在,並且它包含數據,並且我提供的索引是正確的。我還應該提到,如果將if-statemnt更改爲:if (record.GetString(4) != null)
,我會得到相同的異常。什麼是工作封裝在try {} catch (NullReferenceException) {}
區塊中的屬性分配 - 但這可能導致性能損失(難道不是?)。
我在運行Visual Studio的x64版本和我使用的是64位的ODBC驅動程序。
有沒有人遇到過這個?關於如何解決/解決此問題的任何建議?
非常感謝!
的是在正處於第4索引獲取列的SQL數據類型? – HotTester 2010-03-30 12:44:48
這是一個GRAPHIC()CCSID 13488(2),無論是(?)。 – Ciddan 2010-03-30 13:23:34