0

当使用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

从 OracleDataAdapter.Fill() 填充 DataTable 时“指定的转换无效”

4

1 回答 1

0

很抱歉,@Jeff 花了这么长时间才发布!解决方法是获取字段类型,如果是十进制,则调用oracle显式方法GetOracleDecimal()

if (reader.GetFieldType(i).Name.ToUpper() == "DECIMAL")
{
    var x = reader as Oracle.ManagedDataAccess.Client.OracleDataReader;
    var dec = x.GetOracleDecimal(i);
    value = dec.ToString();
}

宇宙中的所有其他字段都可以简单地与 reader.GetValue() 一起工作,这就是使 Oracle 与众不同的原因 :)

于 2021-04-10T15:31:59.360 回答