Мне интересно, это ошибка или я что-то не так делаю.
Я загружаю значения с 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.