Ich führe einen Dienst, der einige Berechnungen durchführt und jede Minute mit einem ms sql Server kommuniziert (24/7, Betriebszeit ist sehr wichtig) und schreibt in das Fehlerprotokoll, wenn etwas Lustiges passiert (wie ein Timeout oder eine verlorene Verbindung).SQL-Fehler "Arithmetische Operation führte zu einem Überlauf."
Dies funktioniert gut, wenn aber in einer Weile werde ich diese Fehlermeldung erhalten:
Arithmetic operation resulted in an overflow.
Da dies auf Kundenseite ausgeführt wird, und die Ausnahme aufgetreten ist nur 3-mal, da das Projekt ins Leben gerufen worden ist (a einige Monate jetzt) wäre es extrem schwer zu fangen und zu debuggen.
Ich verwende OleDbDataAdapter, um mit dem Server zu kommunizieren. Die Daten, die vom Server empfangen werden, waren in keiner Weise besonders, die mir zumindest bekannt sind! Daten sollten niemals Feldgrößen usw. überschreiten, daher kann ich mir keinen Grund für diesen Fehler vorstellen. Auch dies ist extrem schwer zu überprüfen, da ich nur die Fehlermeldung bekomme.
Meine Frage ist: Warum fällt dieser Fehler normalerweise? Ich konnte im Web keine wirklichen Informationen darüber finden, und wenn jemand mir Informationen liefern könnte, würde das sehr geschätzt werden.
Vielen Dank!
BEARBEITEN: Ein sorgfältiges Durchlesen des Fehlerberichts zeigte mir, dass dieser Fehler tatsächlich während des Fill of DataTable-Objekts aufgetreten ist. Code sieht in etwa so aus:
DataTable.Clear();
try
{
oledbdataAdapter.Fill(DataTable, sqlString);
}
catch (Exception e)
{
//error has occured, report
}
Kann jemand Sinn machen?
EDIT2: Ich habe gerade daran gedacht ... Ist es möglich, diese Ausnahme würde ausgelöst werden, weil das System nicht genügend Systemressourcen hat, um die Füllung zu vervollständigen? Dies ist der einzige Grund, warum ich mir das vorstellen kann, um die aufgetretene Ausnahme zu erklären. Es würde auch erklären, warum es tritt nur auf einigen Servern und tritt nie auf dev-Server ...
EDIT3: Hier wird die ganze Ausnahme ist, falls es jemand noch mehr Einblick gibt:
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()
Vielen Dank. Ich werde es brauchen, da es extrem hinten passiert und Werte nicht erwartet werden, ihren Dateitypbeschränkungen irgendwie zu nähern. –