Nothing
significa que un objeto no ha sido inicializado, DBNull
significa que los datos no están definidos/faltan. Hay varias formas de verificar:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
El GetDateTime
El método es problemático porque le está pidiendo que convierta un valor no a DateTime. Item()
devuelve un objeto que se puede probar fácilmente antes conversión.
' System Type
If System.DBNull.Value.Equals(...)
También puede utilizar el DbReader. Esto solo funciona con el índice ordinal, no con un nombre de columna:
If myReader.IsDbNull(index) Then
En base a eso, puede juntar funciones como miembros de clase compartida o volver a trabajar en Extensiones para probar DBNull y devolver un valor predeterminado:
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
Uso:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Para un convertidor DateTime, tendría que decidir qué devolver. Prefiero hacerlo individualmente.