Nothing
bedeutet, dass ein Objekt nicht initialisiert wurde, DBNull
bedeutet, dass die Daten nicht definiert sind/fehlen. Es gibt mehrere Möglichkeiten, dies zu überprüfen:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
Die GetDateTime
-Methode ist problematisch, da Sie sie auffordern, einen Nichtwert in DateTime zu konvertieren. Item()
liefert ein Objekt, das einfach vorher getestet werden kann konvertieren.
' System Type
If System.DBNull.Value.Equals(...)
Sie können auch den DbReader. Dies funktioniert nur mit dem Ordinalindex, nicht mit einem Spaltennamen:
If myReader.IsDbNull(index) Then
Darauf basierend können Sie Funktionen entweder als Shared-Klassenmitglieder zusammenstellen oder in Erweiterungen umarbeiten, um auf DBNull zu testen und einen Standardwert zurückzugeben:
Public Class SafeConvert
Public Shared Function ToInt32(Value As Object) As Integer
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt32(Value)
End If
End Function
Public Shared Function ToInt64(Value As Object) As Int64
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt64(Value)
End If
End Function
' etc
End Class
Verwendung:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Bei einem DateTime-Konverter müssten Sie entscheiden, was zurückgegeben werden soll. Ich mache das lieber einzeln.