【问题标题】:IDataReader from Oracle Overflows when returning decimal values返回十进制值时来自 Oracle 溢出的 IDataReader
【发布时间】:2010-11-08 19:56:45
【问题描述】:

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

当游标包含一个高精度值时,Oracle 的OracleDecimal 数据类型会在调用dataReader.GetValues() 时导致溢出。此问题已得到详细记录,解决方案始终涉及在 OracleDataAdapter 上使用特定方法。我只有一个IDataReader 接口。

如果不将我的代码专门绑定到 ODP.NET,有什么办法可以解决这个问题?肯定有某种方法可以以与提供者无关的方式获取这些数据吗?

【问题讨论】:

    标签: oracle overflow odp.net idatareader


    【解决方案1】:

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

    【讨论】:

    • 我不得不回到编写脚本的人那里,让他专门更改他正在使用的 SQL。伤心,但我别无选择。
    【解决方案2】:

    它可能不是你要找的东西,但 System.Data.Common.DbDataReader 类有一个 GetProviderSpecificValues 函数,可以满足你的需求

    【讨论】:

    • 这种方法有两个问题:(1) 我只有一个接口的引用,(2) 一旦我得到一个 OracleDecimal,我唯一需要处理的就是作为object
    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 2021-09-28
    • 1970-01-01
    • 2018-12-06
    • 2015-08-08
    • 2019-01-14
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多