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

And*_*aev 5 c# sql oracle decimal type-conversion

我遇到一个问题,当尝试在NET(c#)中获取这个简单的SQL查询的结果时发生:

select 1/3 as col from dual
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

select round(1/3,29) as col from dual
Run Code Online (Sandbox Code Playgroud)

但这不会

select round(1/3,28) as col from dual
Run Code Online (Sandbox Code Playgroud)

试图将c#中的列值视为Double获取错误"Invalid cast"

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

Pet*_*lin 2

由于数据类型是十进制,因此必须精确。不可能以小数类型存储 1/3 无限分数。一般来说,如果转换结果不能表示为 Decimal ,则从 Single 或 Double 到 Decimal 的转换会抛出 OverflowException。因此,我需要将该值读取为双精度值,或者确保它是正确的小数。