Nothing
znamená, že objekt nebyl inicializován, DBNull
znamená, že data nejsou definována/chybí. Existuje několik způsobů kontroly:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
metoda je problematická, protože ji žádáte o převod jiné hodnoty na DateTime. Item()
vrací Objekt, který lze snadno otestovat před konverze.
' System Type
If System.DBNull.Value.Equals(...)
Můžete také DbReader. Toto funguje pouze s pořadovým indexem, nikoli s názvem sloupce:
If myReader.IsDbNull(index) Then
Na základě toho můžete dát dohromady funkce buď jako sdílené členy třídy, nebo přepracované do Extensions, abyste otestovali DBNull a vrátili výchozí hodnotu:
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
Použití:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
U převodníku DateTime byste se museli rozhodnout, co vrátit. Raději je dělám individuálně.