Я запускаю службу, которая выполняет некоторые вычисления и общается с сервером ms sql каждую минуту или около того (круглосуточно, время работы очень важно) и записывает в журнал ошибок, если происходит что-то смешное (например, тайм-аут или потеря соединения) .
Это прекрасно работает, но время от времени я получаю эту ошибку:
Арифметическая операция привела к переполнению.
Поскольку это выполняется на стороне клиента, а исключение происходило только 3 раза с момента запуска проекта (через пару месяцев), его будет крайне сложно отследить и отладить.
Я использую OleDbDataAdapter для связи с сервером. Данные, полученные с сервера, не были особенными, о которых я знаю, по крайней мере! Данные никогда не должны превышать размеры полей и т. Д., Поэтому я не могу придумать причину возникновения этой ошибки. Опять же, это крайне сложно проверить, поскольку я получаю только сообщение об ошибке.
Мой вопрос: почему эта ошибка обычно возникает? Мне не удалось найти какую-либо реальную информацию об этом в Интернете, поэтому, если кто-то сможет предоставить мне какую-то информацию, это будет очень цениться.
Спасибо!
РЕДАКТИРОВАТЬ : Внимательное чтение отчета об ошибках показало мне, что эта ошибка действительно произошла во время заполнения объекта DataTable. Код выглядит примерно так:
DataTable.Clear();
try
{
oledbdataAdapter.Fill(DataTable, sqlString);
}
catch (Exception e)
{
//error has occured, report
}
Кто-нибудь может понять это?
EDIT2 : Я только что подумал об этом ... Возможно ли, что это исключение будет вызвано, потому что системе не хватает системных ресурсов для завершения заполнения? Это единственная причина, по которой я могу придумать, объясняет возникновение исключения. Это также объясняет, почему это происходит только на некоторых серверах и никогда не происходит на сервере dev ...
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()