Исключение переполнения при чтении десятичных значений из SQL Server

Мне интересно, это ошибка или я что-то не так делаю.

Я загружаю значения с SqlDataReaderиз базы данных SQL Server 2008, но при определенных обстоятельствах не удается преобразовать значения SQL в значения.net. (.NET 4.0)

Я проследил это до тестового -случая, который демонстрирует реальную проблему :

. Рабочий пример:

"select convert(decimal(38, 19), 260000 ) as test"
rs.GetValue(1);
--> returns 260000 (decimal)

Не рабочий пример:

"select convert(decimal(36, 26), 260000 ) as test"

rs.GetValue(1);
--> throws
   System.OverflowException: Conversion overflows.
   at System.Data.SqlClient.SqlBuffer.get_Decimal()
   at System.Data.SqlClient.SqlBuffer.get_Value()
   at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values)

Я изучил фактические значения, возвращенные SQL Server. Отличаются они тем, что не -рабочий использует для выражения значения 4 целых числа, рабочий — только 3.

Я также проверил исходный код с помощью.net Reflector, который показал, что исключение генерируется, если существует значение более 3 значений, но я не понимаю механику, стоящую за ними.

Итак, мне интересно, является ли это настоящей ошибкой в ​​​​инфраструктуре.net.

11
задан marc_s 4 July 2012 в 09:38
поделиться