Ich weiß, dass es im Internet mehrere Threads und Posts zu diesem Thema gibt und ich habe sie gelesen (nicht jeden Artikel, ich muss zugeben), aber keiner von ihnen hat mich voll befriedigt.
Meine Situation:
Ich verwende ODP.net (dll Version 2.111.6.0), um auf die Oracle DB (Version 10 + 11) zuzugreifen, und einen DataReader, um die Daten abzurufen (.NET 3.5, C #).
Die Verwendung dieses Codes führt zu einer ' System.OverflowException (die arithmetische Operation führte zu einem Überlauf.) '
%Vor%und dieser ergibt einen Wert von <3,000000000000000000000000000000000000000000000000000000000E-126
%Vor%Jetzt muss ich eine Möglichkeit finden, diesen Wert richtig zu ermitteln und auszuwerten - die Datenbank wird auch von anderen Apps verwendet, die ich nicht steuern kann, Änderungen sind also nicht möglich.
Das Konvertieren der Typen in meinem C # -Code von 'dezimal' in 'doppelt' ist auch nicht wirklich eine Option.
Irgendwelche Ideen?
Ich hatte gerade ein ähnliches Problem und habe versucht, den OracleDataAdapter so zu ändern, dass er Oracle-spezifische Typen zurückgibt (data_adapter.ReturnProviderSpecificTypes = true;), aber dies ist nur eine PITA, und Sie werfen OracleStrings zurück auf Strings usw.
Am Ende habe ich es gelöst, indem ich die Rundung der Genauigkeit in der SQL-Anweisung mit der runden Funktion von Oracle durchgeführt habe:
%Vor%Dotnet konvertiert die Figur dann glücklich in eine Dezimalzahl.
OracleDecimal hat eine höhere Genauigkeit als dezimal. Aus diesem Grund müssen Sie zuerst die Präzision reduzieren. Vergessen Sie das Parsen, verwenden Sie die implizite Konvertierung. Versuchen Sie etwas in der Art von (ungetestet):
%Vor%Tags und Links c# oracle odp.net decimal overflowexception