Nothing
significa que um objeto não foi inicializado, DBNull
significa que os dados não estão definidos/ausentes. Existem várias maneiras de verificar:' The VB Function
If IsDBNull(Reader.Item(0)) Then...
O
GetDateTime
O método é problemático porque você está solicitando que ele converta um valor não para DateTime. Item()
retorna Objeto que pode ser testado facilmente antes convertendo. ' System Type
If System.DBNull.Value.Equals(...)
Você também pode o DbReader. Isso só funciona com o índice ordinal, não com um nome de coluna:
If myReader.IsDbNull(index) Then
Com base nisso, você pode reunir funções como membros de classe compartilhada ou retrabalhadas em extensões para testar DBNull e retornar um valor padrão:
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 um conversor DateTime, você teria que decidir o que retornar. Eu prefiro fazer isso individualmente.