我的 If 中有一个 DBNull 异常,为什么?
I have an DBNull Exception in my If, why?
我通过向用户显示数据库中的值来编写程序。查询某个字段是否为NULL时报错
我的尝试:
Dim dtContacts As New DCFLEXNorthwind.ContactsDataTable
taContacts.SelectAllByID(dtContacts, ID)
Dim r As DCFLEXNorthwind.ContactsRow = dtContacts.Rows(0)
If r.Extension Is DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension Is DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension = DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension = DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsDBNull(r.Extension) Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
然后有效查询出现以下错误:
The value for column extension in table Contacts is DBNull.
和
Invalid conversion from type DBNull to type String.
r.Extension
是怎么定义的?
r.Extension = DBNull.Value
可能是正确的,但前提是它直接从 ADO.Net 数据传输对象字段(如 DataReader、DataTable 或 DataSet)读取。这些类型中的字段使用基本 Object
类型,它可以包含字符串、日期时间、数字等值……您可能从数据库中返回的任何内容,包括 DBNull
。
你的 r
变量和它的 Extension
属性 看起来更像是数据传输对象已经被用来填充具有真实属性的真实类型,其中 Extension
属性 明确声明为 string
。此时,检查数据库 null
已经太晚了,因为您无法首先将 DBNull
分配给 属性。
您应该始终通过与 nothing
进行比较来检查值字段是否存在
使用 IsNothing(r.Extension)
或 r.Extension Is Nothing
先检查空值,否则如果值不存在会报错
这是要尝试的代码
Dim dtContacts As New DCFLEXNorthwind.ContactsDataTable
taContacts.SelectAllByID(dtContacts, ID)
Dim r As DCFLEXNorthwind.ContactsRow = dtContacts.Rows(0)
If IsNothing(r.Extension) OR r.Extension Is DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension Is DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension = DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension = DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR IsDBNull(r.Extension) Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
我通过向用户显示数据库中的值来编写程序。查询某个字段是否为NULL时报错
我的尝试:
Dim dtContacts As New DCFLEXNorthwind.ContactsDataTable
taContacts.SelectAllByID(dtContacts, ID)
Dim r As DCFLEXNorthwind.ContactsRow = dtContacts.Rows(0)
If r.Extension Is DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension Is DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension = DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If r.Extension = DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsDBNull(r.Extension) Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
然后有效查询出现以下错误:
The value for column extension in table Contacts is DBNull.
和
Invalid conversion from type DBNull to type String.
r.Extension
是怎么定义的?
r.Extension = DBNull.Value
可能是正确的,但前提是它直接从 ADO.Net 数据传输对象字段(如 DataReader、DataTable 或 DataSet)读取。这些类型中的字段使用基本 Object
类型,它可以包含字符串、日期时间、数字等值……您可能从数据库中返回的任何内容,包括 DBNull
。
你的 r
变量和它的 Extension
属性 看起来更像是数据传输对象已经被用来填充具有真实属性的真实类型,其中 Extension
属性 明确声明为 string
。此时,检查数据库 null
已经太晚了,因为您无法首先将 DBNull
分配给 属性。
您应该始终通过与 nothing
使用 IsNothing(r.Extension)
或 r.Extension Is Nothing
先检查空值,否则如果值不存在会报错
这是要尝试的代码
Dim dtContacts As New DCFLEXNorthwind.ContactsDataTable
taContacts.SelectAllByID(dtContacts, ID)
Dim r As DCFLEXNorthwind.ContactsRow = dtContacts.Rows(0)
If IsNothing(r.Extension) OR r.Extension Is DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension Is DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension = DBNull.Value Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR r.Extension = DBNull Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If
If IsNothing(r.Extension) OR IsDBNull(r.Extension) Then
txtExtension.Text = ""
Else
txtExtension.Text = r.Extension
End If