我想知道这是一个错误还是我出错了。
我正在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 框架中的真正错误。