Oracle中的IDataReader在返回十进制值时溢出

Oracle中的IDataReader在返回十进制值时溢出,oracle,overflow,odp.net,idatareader,Oracle,Overflow,Odp.net,Idatareader,我有一些代码负责将数据从IDataReader转换为IronPython.Runtime.List的PythonTuples。这段代码用于几种不同类型的数据库连接(包括Access、Oracle和MySql) Oracle的OracleDecimal数据类型在调用dataReader.GetValues()时,当光标包含精度较高的值时会导致溢出。这个问题已经有很好的文档记录,解决方案总是涉及在OracleDataAdapter上使用特定的方法。我只有一个IDataReader接口 在不将我的代码

我有一些代码负责将数据从
IDataReader
转换为
IronPython.Runtime.List
PythonTuples
。这段代码用于几种不同类型的数据库连接(包括Access、Oracle和MySql)

Oracle的
OracleDecimal
数据类型在调用
dataReader.GetValues()
时,当光标包含精度较高的值时会导致溢出。这个问题已经有很好的文档记录,解决方案总是涉及在
OracleDataAdapter
上使用特定的方法。我只有一个
IDataReader
接口


在不将我的代码专门绑定到ODP.NET的情况下,有没有办法解决这个问题?当然,一定有某种方法可以以与提供商无关的方式获取这些数据?

它可能不是您想要的,但是,
System.Data.Common.DbDataReader
类有一个
GetProviderSpecificValues
函数,它可以做您想要做的事情

我知道的唯一一个与提供程序无关的方法是对select语句中的值进行四舍五入。我发现舍入到15位小数通常可以解决问题。

这种方法有两个问题:(1)我只有一个接口的引用,(2)一旦我得到OracleDecimal,我唯一需要做的就是将它作为
对象
。我必须回到编写脚本的人那里,让他专门更改他正在使用的SQL。悲伤,但我别无选择。