sql >> Databasteknik >  >> RDS >> Oracle

Hur kontrollerar jag om DataReader-värdet inte är null?

Nothing betyder att ett objekt inte har initierats, DBNull betyder att data inte är definierad/saknad. Det finns flera sätt att kontrollera:

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

GetDateTime Metoden är problematisk eftersom du ber den att konvertera ett icke-värde till DateTime. Item() returnerar objekt som enkelt kan testas före konvertera.

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

Du kan också DbReader. Detta fungerar bara med ordningsindex, inte ett kolumnnamn:

If myReader.IsDbNull(index) Then 

Baserat på det kan du sätta ihop funktioner antingen som delade klassmedlemmar eller omarbetade till Extensions för att testa för DBNull och returnera ett standardvärde:

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

Användning:

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

För en DateTime-konverterare måste du bestämma vad du ska returnera. Jag föredrar att göra dem individuellt.



  1. Återställ automatisk inkrementräknare i postgres

  2. JOIN-frågor kontra flera frågor

  3. Plats för my.cnf-filen på macOS

  4. Hur man installerar MySQL 8.0 på RHEL/CentOS 8/7 och Fedora 35