使用Oracle.ManagedDataAccess.dll填充数据集时,为什么我的Oracle编号会被更改?

时间:2014-05-08 02:06:24

标签: c# .net oracle ado.net

对于一个具体的例子,我有" 31724977359034458496430204230"存储在数据库中,但当我使用dataadapter.Fill()到一个带有十进制列的数据表时,我得到了" 3172497735903445849643020435"代替。

我使用的是Oracle.ManagedDataAccess.dll,但我没有向Microsoft提供商提出此问题。

我可以提供反编译的" GetDecimal" Oracle函数,如果这对任何人都有帮助。

注意:只有在十进制长度为29位时才会出现这种情况。

编辑:正在从另一个表中的外键列正确检索此相同的值。两者都定义为Number(30,0)

1 个答案:

答案 0 :(得分:0)

Oracle NUMBER最多可包含 38位有效数字。 .NET Framework十进制类型限制为 28位。将Oracle NUMBER读入.NET Framework十进制类型会导致超过28位的NUMBER值出现OverflowException。如果您正在从OracleDataReader读取Oracle NUMBER值,我们建议您调用GetOracleNumber类型的访问器方法以将Oracle NUMBER值作为OracleNumber返回。如果要填充DataSet,可以使用FillError事件来确定是否发生了OverflowException,并且如果是,则采取适当的操作。