Laden...

Die arithmetische Operation hat einen Überlauf verursacht bei dbdatareader[spaltenname] auf x64

Erstellt von hypersurf vor 9 Jahren Letzter Beitrag vor 9 Jahren 6.373 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 9 Jahren
Die arithmetische Operation hat einen Überlauf verursacht bei dbdatareader[spaltenname] auf x64

Hallo Leute,

ich hatte gerade ein Problem mit einer Overflow-Exception, die ich zwar gelöst, deren Ursache ich aber nicht verstanden habe. Vielleicht könnt Ihr Licht ins Dunkel bringen.

Folgende Konstellation:

Ein Programm liest Daten aus einer DB2-Datenbank (mittels der Data Provider Factory und dem ODBC-Treiber "iSeries Access ODBC Driver"). Ausgelesen werden die Daten mittels des DbDataReaders. Das Programm ist mit Any CPU erstellt und läuft auf dem Server als 64-Bit-Anwendung. Das Zielframework ist 3.5.

Jetzt wird das Zielframework des Programms auf 4.0 angehoben und sonst nichts geändert. Beim Auslesen jeglicher Daten des DbDataReaders z. B. mit

reader[spaltenname]

kommt völlig unabhängig vom Typ der Tabellenspalte eine > Fehlermeldung:

Overflow-Exception: Die arithmetische Operation hat einen Überlauf verursacht. Wird das Projekt auf x86 kompiliert funktioniert das ganze wieder.

Kann mir jemand erklären warum es sich so verhält?

Gruß hypersurf

16.842 Beiträge seit 2008
vor 9 Jahren

Wahrscheinlich ein ODBC Treiberfehler o.ä.
Aber auf ODBC/OleDB sollte ohnehin verzichtet und stattdessen auf ADO.NET gesetzt werden.
IBM stellt auch einen entsprechenden Provider (IBM DB2 UDB) zur Verfügung, sodass man den fehleranfälligen ODBC-Quatsch weglassen kann.

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 9 Jahren

Okay, dann lag ich mit meiner Vermutung doch richtig.

Normalerweise verwende ich kein ODBC mehr, aber in diesem Fall ist das so vom Kunden vorgegeben (weiß der Geier warum)...

Danke für die Antwort 😃

16.842 Beiträge seit 2008
vor 9 Jahren

..vielleicht, weils der Kunde nicht besser weiß?
Auch das Aufklären und Vorschlagen von Technologien gehört zum Job eines Entwicklers 😉