我想知道这是一个 bug 还是我的操作有问题。
我正在使用 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框架中的真正bug。