填充数据集时ODP.net Oracle Decimal Number精度问题.例外:算术运算导致溢出

m3n*_*tat 13 c# oracle datatable odp.net oracle10g

我正在使用c#.net 2(Visual Studio 2005 SP1)尝试使用来自Oracle10g数据库的select*from table的结果填充数据集.无法在此客户端站点更改.net框架,IDE和数据库.

我正在使用ODP.net提供程序连接,dll版本是2.102.2.20

当我运行fill命令时,我得到一个例外:

算术运算导致溢出

此外,如果我尝试查看Visual Studio设计器中的违规列(显示表数据),我得到 对于表中此列的每一行.如果我的查询选择其他具有整数的列(例如省略此列),则代码可以正常工作.

当我从Toad在数据库中查看时,相关列看起来很好,数据如下所示:

919.742866695572

我需要蒙特卡罗模拟所需的精度.

如果不是使用数据适配器来填充数据表我使用datareader并调用dataReader.getValue(columnIndex)我得到相同的错误但是如果我调用dataReader.GetOracleDecimal(columnIndex)然后我得到我正在寻找的结果,没有错误.

我宁愿使用数据适配器并填充数据集(注意这些是无类型数据集,因为我无法从oracle db中获得自动生成的强类型数据集).我不想使用datareader并遍历结果(选择列值),因为我试图将其作为通用方法编写,以适用于许多场景,无论列数,需要特定的十进制列索引通过数据类型获取调用.

有人可以帮忙吗?我可以使用新版本的ODP.net dll连接到较旧的Oracle10g数据库吗?我想知道这是否会有所帮助.

谢谢

jle*_*jle 0

您可以尝试最新版本的ODP.Net (11g)。它是向后兼容的。我用它连接10g数据库就好了。我认为它也应该适用于 VS 2005。对于 clickonce 部署,只需添加此问题引用的 dll:将 C# 连接到 Oracle 数据库所需的最小客户端占用空间是多少? 重要的一点是,如果您有最新版本的 odp.net,则所有 dll 都包含在安装目录中。您无需单独下载即时客户端。只要寻找他们就可以了。