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:
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.
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%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%