Ich weiß nicht, welche Datenbankbibliothek Sie verwenden, aber die meisten Bibliotheken gebaut on-top von ADO.NET nicht immer eine .NET null
Referenz verwenden, um anzuzeigen, a SQL NULL
Wert. Das ist, was DBNull
ist (Zugriff über DBNull.Value
). Sie können SQL NULL
mithilfe des Object Reference Equality-Operators ==
oder Object.ReferenceEquals
testen.
Ihr Code ist ziemlich verworren. Ich schlage vor, Sie versuchen, diese stattdessen:
Object value = row[8]; // I don't know what `row` is, change this to be a more specific type if there are any type-safety constraints on `row[8]`.
if(Object.ReferenceEquals(DBNull.Value, value)) {
// value is SQL NULL
}
else {
// value is not SQL NULL, but it is not necessarily a Decimal value either
if(value is Decimal) {
return (Decimal)value; // you can't use the shorthand `as` operator with value-types like Decimal
}
}
das Snippet als auch –
umfassen Was die Art der 'row' ist? – Dai
Die Spalte (in Index 8) in der Zeile, aus der Sie lesen, ist null. Sie können NULL nicht in einer Dezimalzahl speichern. – Rob