Мне интересно, является ли это ошибкой или если я что-то не так.Исключение переполнения при чтении десятичных значений из 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)
Не работает exmaple:
"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 целых числа, чтобы выразить значение, только рабочий.
Я также проверил исходный код с помощью .net Reflector, который представил, что генерируется исключение, если значение существует более затем 3 значения, но я не понимаю, что за ними стоит механика.
Итак, мне интересно, является ли это подлинной ошибкой в .net framework.
Прецизионность для десятичных значений только до 28. Пожалуйста, перейдите по ссылке http://stackoverflow.com/questions/745270/c-sharp-sizeof-decimal – praveen
Но рабочий пример даже использует более высокую точность. – Chuck