Nothing
có nghĩa là một đối tượng chưa được khởi tạo, DBNull
có nghĩa là dữ liệu không được xác định / thiếu. Có một số cách để kiểm tra:
' The VB Function
If IsDBNull(Reader.Item(0)) Then...
GetDateTime
có vấn đề vì bạn đang yêu cầu nó chuyển đổi một giá trị không thành DateTime. Item()
trả về Đối tượng có thể được kiểm tra dễ dàng trước đó chuyển đổi.
' System Type
If System.DBNull.Value.Equals(...)
Bạn cũng có thể DbReader. Điều này chỉ hoạt động với chỉ mục thứ tự, không phải tên cột:
If myReader.IsDbNull(index) Then
Dựa trên cơ sở đó, bạn có thể kết hợp các chức năng với tư cách là thành viên Lớp được chia sẻ hoặc được làm lại thành Phần mở rộng để kiểm tra DBNull và trả về giá trị mặc định:
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
Cách sử dụng:
myDate = SafeConvert.ToDateTime(Reader.Item(0))
Đối với công cụ chuyển đổi DateTime, bạn phải quyết định trả về cái gì. Tôi thích làm những việc đó một cách riêng lẻ.