c#中sql查询列中的无限分数值

时间:2012-04-11 07:39:25

标签: c# sql oracle decimal type-conversion

我遇到了在.NET(c#)中尝试获取此简单sql查询结果时出现的问题:

select 1/3 as col from dual

OracleDataReader.GetValue(i)抛出异常:

Arithmetic operation resulted in an overflow.
at Oracle.DataAccess.Types.DecimalConv.GetDecimal(IntPtr numCtx)
at Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i)
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)

我发现当数字精度超过28位时会发生此错误,因此会导致错误:

select round(1/3,29) as col from dual

但这不会

select round(1/3,28) as col from dual

尝试将c#中的列值视为Double获取错误“Invalid cast”

除了无处不在的数字列舍入外,有没有人知道避免这种情况的方法?

2 个答案:

答案 0 :(得分:2)

由于数据类型是十进制,因此必须精确。在十进制类型中存储1/3无限分数是不可能的。一般来说Conversions from Single or Double to Decimal throw an OverflowException if the result of the conversion is not representable as a Decimal。因此,我需要将此值读取为double,或者确保它是正确的小数。

答案 1 :(得分:0)