对于一个具体的例子,我有" 31724977359034458496430204230"存储在数据库中,但当我使用dataadapter.Fill()到一个带有十进制列的数据表时,我得到了" 3172497735903445849643020435"代替。
我使用的是Oracle.ManagedDataAccess.dll,但我没有向Microsoft提供商提出此问题。
我可以提供反编译的" GetDecimal" Oracle函数,如果这对任何人都有帮助。
注意:只有在十进制长度为29位时才会出现这种情况。
编辑:正在从另一个表中的外键列正确检索此相同的值。两者都定义为Number(30,0)
答案 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,并且如果是,则采取适当的操作。