Nothing
означава, че обектът не е инициализиран, DBNull
означава, че данните не са дефинирани/липсващи. Има няколко начина за проверка:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
методът е проблематичен, защото го молите да преобразува стойност, която не е в DateTime. Item()
връща обект, който може да бъде тестван лесно преди конвертиране.
' System Type
If System.DBNull.Value.Equals(...)
Можете също така DbReader. Това работи само с порядковия индекс, а не с име на колона:
If myReader.IsDbNull(index) Then
Въз основа на това можете да съберете функции или като споделени членове на класа, или преработени в разширения, за да тествате за DBNull и да върнете стойност по подразбиране:
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
Употреба:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
За конвертор на DateTime трябва да решите какво да върнете. Предпочитам да ги правя индивидуално.