【发布时间】:2010-11-05 19:55:00
【问题描述】:
我正在使用 c# .net 2 (Visual Studio 2005 SP1) 尝试使用来自 Oracle10g 数据库的 select * from table 的结果填充数据集。 .net 框架、IDE 和数据库无法在此客户端站点更改。
我正在使用 ODP.net 提供程序进行连接,dll 版本是 2.102.2.20
当我运行填充命令时,我得到一个异常:
算术运算导致溢出
此外,如果我尝试在 Visual Studio 设计器(显示表数据)中查看有问题的列,我会为表中该列的每一行得到 。如果我的查询选择其他具有整数的列(例如省略此列),该代码将完美运行。
当我在 Toad 的数据库中查看有问题的列时,它看起来很好,数据看起来像:
919.742866695572
我需要 精度,因为它是蒙特卡罗模拟所必需的。
如果我不使用数据适配器来填充数据表,而是使用数据读取器并调用 dataReader.getValue(columnIndex) 我会得到相同的错误,但如果我调用 dataReader.GetOracleDecimal(columnIndex) 那么我会得到我正在寻找的结果,没有错误。
我宁愿使用数据适配器并填充数据集(请注意,这些是无类型数据集,因为我无法从 oracle db 中获取自动生成的强类型数据集)。我不想使用 datareader 并遍历结果(选择列值),因为我试图将其编写为适用于许多场景的通用方法,无论列数如何,十进制列的索引需要特定按数据类型获取调用。
有人可以帮忙吗? 我可以使用新版本的 ODP.net dll 连接到旧的 Oracle10g 数据库吗?我想知道这是否会有所帮助。
谢谢
【问题讨论】:
-
将 ODP.net 版本更改为 11g (Oracle.DataAccess.dll 2.111.6.20) 并没有帮助我仍然得到算术运算导致溢出异常。一种虽然不理想的解决方案是这样做:SELECT TO_CHAR(offendingColumn) FROM Table 但是现在我的 dataColumn 类型不同,我将这些数据写入 Excel,所以我不确定这是否也会影响单元格格式。跨度>
-
另外这意味着我需要知道表格中的每一列我不能只做一个毯子 Select * From Table
标签: c# oracle datatable oracle10g odp.net