Oracle-Nummer C# - dezimal
Ich weiß, es gibt etliche threads und Beiträge zu diesem Thema im internet und ich habe gelesen (nicht jeder Artikel muss ich zugeben), aber keiner von Ihnen hat vollständig befriedigt mich.
Meine situation:
Ich bin mit ODP.net (dll-version 2.111.6.0), um Zugriff auf die Oracle-DB (version 10 + 11) und ein DataReader-Objekt, um die Daten abzurufen (.NET 3.5, C#).
Mit diesem code, die Ergebnisse in einem " System.OverflowException (Arithmetische operation hat einen überlauf verursacht.)'
decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
und diese Ergebnisse in einem Wert '3,000000000000000000000000000000000000000000000000000000000 E-126'
decimal.TryParse(oraReader.GetOracleValue(0).ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
Nun muss ich einen Weg finden, abrufen und auswerten dieser Wert richtig - die DB ist auch aus anderen apps, die sind außerhalb meiner Kontrolle, so dass änderungen dort nicht möglich sind.
Umwandlung der Typen in meinem C# - code aus 'decimal' auf 'double' ist auch nicht wirklich eine option.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte gerade ein ähnliches Problem, und habe versucht, den Ansatz der änderung des OracleDataAdapter zurückkehren Oracle-spezifischen Datentypen ( data_adapter.ReturnProviderSpecificTypes = true; ), aber das ist nur eine PITA, die Sie bis Ende casting OracleStrings zurück zu strings, etc.
Am Ende habe ich es gelöst, indem Sie die Präzision der Rundung in das SQL-statement mit Oracle round-Funktion:
Dotnet wird dann gerne umwandeln der Abbildung in eine Dezimalzahl.
OracleDecimal hat eine größere Genauigkeit als Dezimalzahl. Aus diesem Grund, Sie haben zu reduzieren, die Genauigkeit der ersten. Vergessen Sie all die Parsen, verwenden Sie eine implizite Konvertierung. Versuchen, etwas entlang der Linien von (ungetestet):