您的位置:首页 > 数据库 > Oracle

C# 连接ORACLE数据库,执行查询提示“算术运算导致溢出。”

2013-09-25 17:29 1226 查看
同事问了一个问题,访问oracle数据库,执行查询语句,提示”System.OverflowException: 算术运算导致溢出。“

环境:c# + ORACLE 10g client

操作中他同时执行了多条sql语句,第一条 语句查询的是基础信息,可以执行通过,从第二条开始都是统计运算的结果,执行报错。

异常详细信息如下:

System.OverflowException: 算术运算导致溢出。

在 Oracle.DataAccess.Types.DecimalConv.GetDecimal(IntPtr numCtx)

在 Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i)

在 Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)

在 Oracle.DataAccess.Client.OracleDataReader.GetValues(Object[] values)

在 System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)

在 System.Data.ProviderBase.SchemaMapping.LoadDataRow()

在 System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)

在 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)

在 System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)

在 Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)

在 Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)

在 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)

一开始认为要么是程序的问题,要么是数据库的问题,百度、谷歌一番,一直没有解决问题,折腾了半下午,将要放弃的时候,突然想起他执行sql语句的结果,有的有十几位小数,有的没有小数,会不会是小数位数的问题呢?然后给每一个统计结果列都加上round,测试结果,很是意外,竟然执行通过了!

仔细想想,这是对的,数据库运算有数据库的精度,开发程序有开发 程序的精度,虽然一般情况不会出问题,但这次例外啦!所以,利用sql做数据库统计的时候,还真要控制精度在一个常规的范围之内。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐