Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como verificar se o valor do DataReader não é nulo?


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.