【发布时间】:2016-11-22 01:48:59
【问题描述】:
我正在运行一项服务,该服务每分钟左右(24/7,正常运行时间非常重要)进行一些计算并与 ms sql 服务器通信,如果发生任何有趣的事情(如超时或丢失连接),则会写入错误日志.
这很好用,但有时我会收到此错误:
算术运算导致溢出。
由于这是在客户端运行的,并且自项目启动以来(现在已经几个月)异常只发生了 3 次,因此很难捕获和调试。
我正在使用 OleDbDataAdapter 与服务器进行通信。从服务器接收的数据在任何方面都不是特别的,至少我知道!数据不应该超过字段大小等,所以我真的想不出这个错误发生的原因。同样,这非常难以验证,因为我得到的只是错误消息。
我的问题是:为什么通常会出现此错误?我一直无法在网上找到任何关于它的真实信息,所以如果有人能提供一些信息给我,我将不胜感激。
谢谢!
编辑:仔细阅读错误报告,我发现这个错误实际上是在填充 DataTable 对象期间发生的。代码如下所示:
DataTable.Clear();
try
{
oledbdataAdapter.Fill(DataTable, sqlString);
}
catch (Exception e)
{
//error has occured, report
}
谁能理解这个?
EDIT2:我刚想到这个……会不会因为系统没有足够的系统资源来完成Fill而抛出这个异常?这是我能想到的解释异常发生的唯一原因。它还可以解释为什么它只发生在某些服务器上而从不发生在开发服务器上......
EDIT3:这是整个例外情况,以防它让任何人有更多见解:
System.OverflowException: Arithmetic operation resulted in an overflow.
at System.Data.DataTable.InsertRow(DataRow row, Int32 proposedID, Int32 pos, Boolean fireEvent)
at System.Data.DataTable.LoadDataRow(Object[] values, Boolean fAcceptChanges)
at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at INDAZajemService.INDAZajem.FillDataSet()
【问题讨论】:
标签: c# sql sql-server oledb oledbexception