我不知道这是否是一个错误,或者如果我去了什么。
我加载值有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的retured的实际值。 他们不同的是,非工作一个使用4个整数表达值时,工作一个只有3个。
我当时也请与.net反射源代码公布,如果多于3个值的值存在异常被抛出,但我不知道他们背后的机制。
所以,我不知道这是否是在.NET Framework真正的错误。