Nothing
oznacza, że obiekt nie został zainicjowany, DBNull
oznacza, że dane nie są zdefiniowane/brakuje. Istnieje kilka sposobów sprawdzenia:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
Metoda jest problematyczna, ponieważ prosisz ją o przekonwertowanie wartości niebędącej wartością na DateTime. Item()
zwraca obiekt, który można łatwo przetestować przed konwersja.
' System Type
If System.DBNull.Value.Equals(...)
Możesz także DbReader. Działa to tylko z indeksem porządkowym, a nie z nazwą kolumny:
If myReader.IsDbNull(index) Then
Na tej podstawie możesz połączyć funkcje jako elementy klasy Shared lub przerobione na rozszerzenia, aby przetestować DBNull i zwrócić wartość domyślną:
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
Użycie:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
W przypadku konwertera DateTime musisz zdecydować, co zwrócić. Wolę robić to indywidualnie.