阅读从SQL Server十进制值时溢出异常(Overflow exception when rea

2019-07-30 06:11发布

我不知道这是否是一个错误,或者如果我去了什么。

我加载值有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真正的错误。

Answer 1:

它不是你的财产以后从过于精确也许做错了,分开。 我不认为它是一个新的问题,无论是 。

你可以说了一个错误,或者只是在功能上的差距。 在.NET Decimal结构就不能代表存储在您的SQL Server的价值decimal这样一个OverflowException被抛出。

无论您需要在检索前值操纵数据库中的东西兼容,或者读出的数据以原始二进制或字符串格式和操作在.NET方面。

或者,你可以写一个新类型,处理它。

这可能只是简单使用兼容的decimal首先定义,除非你真的很需要那精度。 如果你这样做我很想知道为什么。



文章来源: Overflow exception when reading decimal values from SQL Server