Frage

Ich weiß, gibt es mehrere Themen und Beiträge zu diesem Thema im Internet und ich habe gelesen, sie (nicht jeden Artikel, ich muß zugeben), aber keiner von ihnen hat mich voll erfüllen.

Meine Situation:
Ich verwende ODP.net (DLL-Version 2.111.6.0), um die Oracle-DB zugreifen (Version 10 + 11) und ein Datareader zum Abrufen der Daten (.NET 3.5, C #).

Mit diesem Code führt zu einem ' System.OverflowException (Rechenoperation in einem Überlauf geführt.)


decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

und dieser führt zu einem Wert von ' 3,000000000000000000000000000000000000000000000000000000000E-126


decimal.TryParse(oraReader.GetOracleValue(0).ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

Jetzt muss ich einen Weg finden, abrufen und bewerten Sie diesen Wert richtig - die DB auch von anderen Anwendungen verwendet wird, die so meiner Kontrolle sind out ändert es nicht möglich

.

Konvertierung der Typen in meinem C # -Code von ‚Dezimal‘ auf ‚double‘ ist auch nicht wirklich eine Option.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich hatte gerade ein ähnliches Problem und versuchte, den Ansatz der OracleDataAdapter Ändern Oracle spezifische Typen zurückzukehren (data_adapter.ReturnProviderSpecificTypes = true;), aber dies ist nur ein PITA, Sie OracleStrings zurück zu Strings am Ende Gießen usw.

Am Ende löse ich es durch die Präzision zu tun in der SQL-Anweisung Rundung unter Verwendung von Oracle Rundenfunktion:

SELECT round( myfield, 18 ) FROM mytable

Dotnet wird dann wandelt glücklich die Figur in eine Dezimalzahl.

Andere Tipps

OracleDecimal hat eine größere Genauigkeit als Dezimalzahl. Aus diesem Grund müssen Sie zunächst die Präzision verringern. Vergessen Sie all die Analyse verwenden implizite Konvertierung. Versuchen Sie, etwas entlang der Linien von (nicht getestet):

decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top