【发布时间】:2019-11-02 14:21:30
【问题描述】:
当使用Oracle.ManagedDataAccess.Client.OracleDataReader,然后调用reader.GetValue(i),我们得到了上面的异常。
这可以使用这个查询来模拟:
SELECT 1/3 as foo FROM DUAL
当oracle数据是Oracle类型Decimal,并且数据的精度超过.NET小数的小数位数时,就会出现问题。主要问题是 reader.GetValue(i) 会这样做,因此您无法控制它在内部引发此错误的事实。
我实际上有一个解决方法,我将把它作为答案发布,因为我过去曾多次遇到过这个问题,而网络上还没有一个好的答案。
相关:
https://community.oracle.com/thread/4017980
"Specified cast is not valid" when populating DataTable from OracleDataAdapter.Fill()
【问题讨论】:
-
SELECT 1/3 as foo FROM DUAL不会导致0? (也许 Oracle 会自动转换为小数或浮点数?) -
您不能使用其他方法...例如 reader.GetDecimal() 或类似的方法吗?
-
@douglas.kirschman,不幸的是,GetDecimal 也失败了。
-
@Igor,Oracle 确实正确地转换了这些,所以你得到 0.33333...
-
@DanielWilliams 我自己刚遇到这个问题。您在问题中提到您会发布解决方法作为答案,但从未这样做。
标签: .net oracle-manageddataaccess