У меня есть OdbcDataReader, который получает данные из базы данных и возвращает набор записей.IDataRecord.IsDBNull вызывает System.OverflowException (арифметическое переполнение)
Код, который выполняет запрос выглядит следующим образом:
OdbcDataReader reader = command.ExecuteReader();
while (reader.Read())
{
yield return reader.AsMovexProduct();
}
Метод возвращает IEnumerable из пользовательского типа (MovexProduct
). Convertion из 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 с сообщением исключения «арифметическая операция привело к переполнению ».
StackTrace: 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) {}
, но это может привести к потере производительности (не так ли?).
Я запускаю x64 версию Visual Studio, и я использую 64-разрядный драйвер odbc.
Есть ли у кого-нибудь еще такое? Любые предложения относительно того, как я могу решить эту проблему?
Большое спасибо!
Каков тип данных в sql столбца, который извлекается в 4-м индексе? – HotTester
Это GRAPHIC() CCSID 13488 (2), что бы это ни было (?). – Ciddan