Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 正确处理dbnull值_.net_Vb.net_Ms Access_Error Handling_Dbnull - Fatal编程技术网

.net 正确处理dbnull值

.net 正确处理dbnull值,.net,vb.net,ms-access,error-handling,dbnull,.net,Vb.net,Ms Access,Error Handling,Dbnull,我编写了一段代码,当用户名与登录我的程序的用户相同时,可以从access db检索电子邮件地址。我希望在名为email Dim x If ConnectionDb.State = ConnectionState.Closed Then ConnectionDb.Open() Dim cmd As OleDbCommand = ConnectionDb.CreateCommand cmd.CommandText = " SELECT ID, EmailAddress, TelephoneNo F

我编写了一段代码,当用户名与登录我的程序的用户相同时,可以从access db检索电子邮件地址。我希望在名为
email

Dim x

If ConnectionDb.State = ConnectionState.Closed Then ConnectionDb.Open()
Dim cmd As OleDbCommand = ConnectionDb.CreateCommand
cmd.CommandText = " SELECT ID, EmailAddress, TelephoneNo FROM tblContacts WHERE ID='" & NameVariable & "'"
x = cmd.ExecuteReader()
While x.Read()
    If x("EmailAddress").IsDBNull(0) Then
        Return
    Else
        Email.Text = x.GetString(0)
    End If
 . . . . 
但是,当程序运行时,我收到以下错误,因为某些用户没有EmailAddress的值:

System.MissingMemberException:'未找到类型'DBNull'上的公共成员'IsDBNull'。-第7行

我还希望为
TelephoneNo
值添加功能,该值也将显示在表单的文本框中。
我如何才能成功地检查空值而不让程序出错?

取决于您的选项,
Dim x
可能是另一回事。如果选项<代码>推断处于<代码>打开状态,则此处为<代码>读取器

Dim x = cmd.ExecuteReader()
但在您的例子中,这是
对象
,因为使用
选项推断
,您需要在同一行上声明和赋值。您需要以OleDbDataReader的身份执行
尺寸x
。这样,您将在
IsDBNull
上看到intellisence错误。您在这里确实遇到了后期绑定错误

你应该这样做

If DbNull.Value.Equals(x("EmailAddress")) Then
这会解决你的问题。但是你有更多的问题。好的,如果选择单行/单值,只需使用
ExecuteScalar

或者,至少是这样

If x.Read() AndAlso Not DbNull.Value.Equals(x("EmailAddress")) Then
    Email.Text = x("EmailAddress").ToString()
End If

取决于您的选项,
Dim x
可能是另一回事。如果选项<代码>推断处于<代码>打开状态,则此处为<代码>读取器

Dim x = cmd.ExecuteReader()
但在您的例子中,这是
对象
,因为使用
选项推断
,您需要在同一行上声明和赋值。您需要以OleDbDataReader的身份执行
尺寸x
。这样,您将在
IsDBNull
上看到intellisence错误。您在这里确实遇到了后期绑定错误

你应该这样做

If DbNull.Value.Equals(x("EmailAddress")) Then
这会解决你的问题。但是你有更多的问题。好的,如果选择单行/单值,只需使用
ExecuteScalar

或者,至少是这样

If x.Read() AndAlso Not DbNull.Value.Equals(x("EmailAddress")) Then
    Email.Text = x("EmailAddress").ToString()
End If

欢迎来到SO。你不应该删除有答案的问题。他们将得到恢复。你应该做什么,如果答案对你有帮助,就接受它。欢迎参加。你不应该删除有答案的问题。他们将得到恢复。您应该做的是,如果答案对您有帮助,请接受它。如果在软件要求中,空字符串“等效”为DB null,则使用
AndAlso Not string.IsNullOrEmpty(x(“EmailAddress”)
甚至
AndAlso x.(“EmailAddress”).ToString.Length>0
可能更具可读性。这些也将解释来自数据库的空字符串。@HardCode我希望您的意思是在
DBnull
签入
IF
之后使用
IsNullOrEmpty
。因为您不能使用
IsNullOrEmpty
而不是
DBNull
。但它也依赖于数据库。例如,Oracle没有空字符串的概念—只有null或value。在这种情况下,实际上,您可以在分配期间添加
Trim()
。文本框从不为空。但是,如果有人将空白存储到DB中,这就是问题的开始。应修剪保存的所有数据。您是否可以看到这样一个场景:在txt中有
value1
,如果没有找到记录,则按下按钮并保留
value1
?首先清空itugh,它应该是
String.IsNullOrEmpty(x(“EmailAddress”).ToString)
如果x.Read()并且也不是String.IsNullOrEmpty(x(“EmailAddress”).ToString),那么你知道,在重新粘贴原始行之后,我开始怀疑我对这一行“可能更可读”的想法,我有一个DATAROW的代码,从DATAATION,通过DATAdAdvad加载,它将在代码> DR(“MyField”)中考虑DB空值。ToString < /代码>作为空字符串。它将null转换为空字符串。如果在软件要求中空字符串“等效”为DB null,则使用
和也可以不使用字符串.IsNullOrEmpty(x(“EmailAddress”)
甚至
和也可以使用x.(“EmailAddress”).ToString.Length>0
。这些也将解释来自数据库的空字符串。@HardCode我希望您的意思是在
DBnull
签入
IF
之后使用
IsNullOrEmpty
。因为您不能使用
IsNullOrEmpty
而不是
DBNull
。但它也依赖于数据库。例如,Oracle没有空字符串的概念—只有null或value。在这种情况下,实际上,您可以在分配期间添加
Trim()
。文本框从不为空。但是,如果有人将空白存储到DB中,这就是问题的开始。应修剪保存的所有数据。您是否可以看到这样一个场景:在txt中有
value1
,如果没有找到记录,则按下按钮并保留
value1
?首先清空itugh,它应该是
String.IsNullOrEmpty(x(“EmailAddress”).ToString)
如果x.Read()并且也不是String.IsNullOrEmpty(x(“EmailAddress”).ToString),那么你知道,在重新粘贴原始行之后,我开始怀疑我对这一行“可能更可读”的想法,我有一个DATAROW的代码,从DATAATION,通过DATAdAdvad加载,它将在代码> DR(“MyField”)中考虑DB空值。ToString < /代码>作为空字符串。它将null转换为空字符串。