Sql-Fehler "die Arithmetische operation hat einen überlauf verursacht."
Mir läuft ein Dienst, der macht einige Berechnungen und kommuniziert mit einer ms-sql-server jede minute oder so (24/7, die uptime ist sehr wichtig) und schreibt Fehler melden, wenn etwas lustiges passiert (wie ein timeout oder Verbindung verloren).
Dies funktioniert gut, aber einmal in eine Weile bekomme ich diese Fehlermeldung:
Arithmetische operation hat einen überlauf verursacht.
Da dies die Ausführung auf client-Seite, und die Ausnahme trat nur 3 mal, seit das Projekt gestartet wurde (ein paar Monate jetzt) diese wäre extrem schwer zu fangen und zu Debuggen.
Ich bin mit OleDbDataAdapter mit dem server kommunizieren. Die Daten, die vom server empfangen wurde nichts besonderes in irgendeiner Weise, dass ich mir bewusst bin, mindestens! Daten sollte nie mehr als Feldgrößen etc, also kann ich nicht wirklich denke, dass der Grund für diesen Fehler. Auch dies ist extrem schwer zu überprüfen, da ich alles was ich bekomme ist die Fehlermeldung.
Meine Frage ist: Warum wird dieser Fehler in der Regel erwachsen? Ich war nicht in der Lage zu finden keine wirklichen Informationen über Sie auf dem web, so dass, wenn jemand liefern könnte, der mich mit einigen Informationen würde sehr geschätzt werden.
Danke!
BEARBEITEN: EIN sorgfältiges Lesen der Fehler-Bericht zeigte mir, dass dieser Fehler tatsächlich aufgetreten ist, während das Füllen von DataTable-Objekt. Code sieht ungefähr so aus:
DataTable.Clear();
try
{
oledbdataAdapter.Fill(DataTable, sqlString);
}
catch (Exception e)
{
//error has occured, report
}
Kann mir jemand den Sinn dieses?
EDIT2: ich habe gerade daran gedacht ... Ist es möglich, diese Ausnahme würde geworfen werden, weil das system nicht über genügend system-Ressourcen, um vollständige Füllung? Dies ist der einzige Grund, der mir einfällt, der erklären würde die exception aufgetreten. Es würde auch erklären, warum es tritt nur auf manchen Servern, und tritt nie auf dem dev-server ...
EDIT3: Hier ist die ganze Ausnahme für den Fall, es gibt niemanden mehr Einblick:
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()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Berechnungen auf Aggregationen auf den Daten, dann würde es zu sein scheinen, was in größeren ergibt sich dann die Struktur der Tabelle erwartet wird.
Es in der Regel passiert, wenn Sie eine Zahl, die zu groß oder zu klein, passen in einen bestimmten Datentyp. Also, wenn Sie hatte, sagen, die Anzahl 120398018209571037 und versucht, es in ein Int32, würden Sie diese Fehlermeldung erhalten. Sie brauchen, um ein paar mehr Informationen in deinem code wo dies passiert ist, um die Nadel nach unten. Viel Glück!
Ich war dabei ein wählen Sie und füllen
DataAdapter
mit den Ergebnissen. Dieser code ist in einer Schleife und vor die Schleife endet, lösche ich meinen DataTable:varDataTable.Clear()
.ex:
Aber nach einem 65xxx records, erhielt ich den Fehler
Arithmetic operation resulted in an overflow
.Ich bin mir nicht sicher, aber ich denke, dass die datatable war "dimensioniert" mit den ersten Ergebnissen. Offensichtlich, meine ersten Platten waren ganzen zahlen.
Um dieses Problem zu lösen ich nicht klar, die DataTableTasas, ich lasse es wie folgt:
Hoffe, das hilft.
Habe ich das problem gelöst, wenn ich mit VS.Net 2013 mit SQL Server als backend. Setzen Sie einfach die Projekt-build-Einstellungen auf "x86" anstelle von "Any cpu". und dort gehen Sie. Aber natürlich müssen Sie überprüfen Ihre Anforderungen zuerst.
Hatte ich dieses Problem, aber nur wenn eine Verbindung von einer web-Anwendung, die unter IIS ausgeführt wird. Die Lösung in meinem Fall war:
Ich habe noch nicht zu den Anwendungspool neu starten, die änderung behoben das problem sofort.