Oracle
 sql >> Database >  >> RDS >> Oracle

Come verificare se il valore di DataReader non è nullo?

Nothing significa che un oggetto non è stato inizializzato, DBNull significa che i dati non sono definiti/mancanti. Esistono diversi modi per verificare:

' The VB Function
If IsDBNull(Reader.Item(0)) Then...

Il GetDateTime il metodo è problematico perché gli stai chiedendo di convertire un valore non in DateTime. Item() restituisce Oggetto che può essere testato facilmente prima conversione.

 ' System Type
 If System.DBNull.Value.Equals(...)

Puoi anche il DbReader. Funziona solo con l'indice ordinale, non con il nome di una colonna:

If myReader.IsDbNull(index) Then 

Sulla base di ciò, puoi mettere insieme funzioni come membri di una classe condivisa o rielaborate in estensioni per testare DBNull e restituire un valore predefinito:

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

Utilizzo:

myDate = SafeConvert.ToDateTime(Reader.Item(0))

Per un convertitore DateTime, dovresti decidere cosa restituire. Preferisco farli individualmente.