I don't know what database library you're using, but most libraries built on-top of ADO.NET do not always use a .NET null
reference to indicate a SQL NULL
value. That's what DBNull
is for (accessed via DBNull.Value
). You can test for SQL NULL
by using the Object Reference Equality operator ==
or Object.ReferenceEquals
.
Your code is rather convoluted. I suggest you try this instead:
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
}
}