2009-05-13 11 views
4

Ich versuche, eine Spalte von Zeichenfolgen in Oracle (Version 8i) zu einer ganzen Zahl zu analysieren.Konvertieren einer Zeichenfolge in eine Ganzzahl in Oracle

ich die Ergebnisse durch Oracle.DataAccess Bibliothek am Zugriff auf

Ich bin schon TO_NUMBER mit einer Maske mit dem String in eine Zahl ohne Dezimalstellen zu konvertieren. Das Problem besteht darin, dass der Wert im Client-Code als Dezimalzahl und nicht als Int abgerufen wird.

+2

, warum Sie mit "C#" haben Tag und „odp. Netz"? Wenn es sich um eine Oracle-Frage handelt, benötigen Sie diese Tags nicht. Wenn es sich um eine C# -Frage handelt, können Sie eine Zeichenkette mit int.Parse ("42") in ein int konvertieren; – DonkeyMaster

+0

Ich denke, es ist keine C# -Frage, also schlage ich vor, Sie Ihre Frage reedit und entfernen Sie das C# -Tag –

+1

es ist eine ODP.Net Frage als das Problem, das ich habe, ist der Typ, der innerhalb der DataTable von Oracle.DataAccess zurückgegeben wird. Client.OracleDataAdapter ist eine Dezimalzahl lieber als ein Int. – JDunkerley

Antwort

3

NUMBER Spalten immer wieder als Dezimalzahlen in ODP.NET verwenden. Um dies zu umgehen, ziehen Sie es als OracleDecimal zurück, das mehrere "Toxxxx" -Methoden hat, um den Wert in den nativen .NET-Typ zu konvertieren, den Sie benötigen.

while (myOracleDataReader.Read()) 
{ 
    int x = myOracleDataReader.GetOracleDecimal(0).ToInt32(); 
} 

(Verzeihen Sie mir, wenn Sie den obigen Code nicht zu 100% korrekt ist, da ich nicht ODP.NET zu Hause installiert haben.)

1

TO_NUMBER ist was Sie wollen, insbesondere die TO_NUMBER('42', '99') Version.

+0

Habe das gerade versucht, obwohl die Werte innerhalb von Oracle ganze Zahlen sind. Die Ausgabe in die DataTable ist immer noch eine Dezimalzahl. – JDunkerley

+0

Dieser gibt einen .Net Dezimal-Typ noch zurück. –

0

Sie können immer die Dezimalzahl in eine ganze Zahl drehen Sie die Rundenfunktion (oder den trunc oder Bodenfunktionen)

7
CAST(field AS integer) 
+0

Dieser gibt einen .Net Dezimal-Typ noch zurück. –