在使用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()
答案 0 :(得分: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 的特别之处:)