Oracle.DataAccess DataRow.Fielddecimal InvalidCastException

8

In meinem Code habe ich System.Data.OracleClient für eine Datenbankverbindung verwendet. Ich möchte diese Bibliothek (weil sie veraltet ist) durch Oracle.DataAccess ersetzen. Leider habe ich festgestellt, dass DataRow.Field () InvalidCastException auslöst. Das gleiche Verhalten ist mit (decimal)x.Rows[0]["COLUME_NAME"] . Ich habe dieses Problem nicht mit System.Data.OracleClient .

Hier ist ein Codebeispiel

%Vor%

TR_SEQ_NUM hat den NUMBER(8,0) Datentyp und die volle Ausnahme ist:

%Vor%

Code Beispiel arbeitet mit System.Data.OracleClient , aber nicht mit Oracle.DataAccess

Ich weiß, dass ich Convert.ChangeType verwenden kann, aber ich frage mich, ob es eine Möglichkeit gibt, dasselbe Verhalten wie bei System.Data.OracleClient zu haben. Das Refactoring meines gesamten Codes wird zu viel Zeit kosten.

    
Václav Starý 05.02.2016, 15:19
quelle

2 Antworten

1

Der Wert in der Datenbank ist keine Dezimalzahl und ein boxed int (der Parameter 'value' in der Fehlermeldung) kann nicht in eine Dezimalzahl umgewandelt werden, obwohl ein int in eine Dezimalzahl umgewandelt wurde, die OK ist. Diese Antwort führt zu weiteren Informationen .

Sie können es in Aktion mit diesem sehen:

%Vor%

Wenn Sie sich die Unbox.ValueField-Methode ansehen, tut es ...

%Vor%

Grundsätzlich müssen Sie

%Vor%     
Llwyd 11.02.2016 14:49
quelle
0

Sieht an, dass Ihre Daten einen Nullwert enthalten und Sie keine nullfähigen Daten in nicht nullwertfähige Dezimaltypen konvertieren können.

Bitte verwenden Sie die folgende Anweisung, um die Nullwert-Dezimalspalte aus der DB zu lesen

%Vor%     
Rameshkan B 09.08.2016 12:31
quelle

Tags und Links