Правильная обработка значений dbnull - PullRequest
1 голос
/ 06 февраля 2020

Я написал код, который извлекает адрес электронной почты из БД доступа, когда имя пользователя совпадает с именем пользователя, вошедшего в мою программу. Я sh для отображения значения адреса электронной почты в текстовом поле с именем 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: 'Publi c член' IsDBNull 'для типа' DBNull 'не найден.' - строка 7

I wi sh, чтобы также добавить функциональность для значения TelephoneNo, которое также будет отображаться в текстовом поле на форме. Как я могу успешно проверить наличие нулевых значений, если программа не запускается с ошибкой?

1 Ответ

0 голосов
/ 06 февраля 2020

Зависит от вас, Dim x может быть другим. Если опция infer равна On, это reader здесь

Dim x = cmd.ExecuteReader()

Но в вашем случае это object, потому что с option infer вам нужно объявить и назначить в одной строке. вам нужно сделать Dim x as OleDbDataReader. Таким образом, вы увидите ошибку intellisence на IsDBNull. Вы действительно столкнулись с ошибкой позднего связывания здесь

Вы должны сделать это

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...