VB.net SqlDataReader如果GetString函数具有null值,如何显示messagebox?

时间:2016-04-25 14:19:05

标签: sql vb.net winforms

我有一个登录表单,我需要检查我的数据库,用户输入的电子邮件和密码是否与数据库匹配。

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click


    myConn = New SqlConnection(My.Settings.MySQLData)

    myCmd = myConn.CreateCommand

    myCmd.CommandText = "SELECT Email FROM dbo.[User]" &
                        " WHERE Email = '" & tbEmail.Text & "'"

    myConn.Open()
    myReader = myCmd.ExecuteReader

    myReader.Read()


    If myReader.IsDBNull(0) Then

        MessageBox.Show("The email address input is invalid or does not exist in database.")

    ElseIf myReader.GetString(0) <> tbEmail.Text Then

        MessageBox.Show("The email address input is invalid or does not exist in database.")

    Else

        MessageBox.Show("Email address is OK")

    End If


    myReader.Close()
    myConn.Close()

这只是电子邮件部分。我还有一个我尚未输入的密码部分。

上面的代码不起作用。检查数据库登录的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

根据您上面的评论,错误是:

  

没有数据时无效尝试读取。

这意味着代码假设 SQL查询返回至少一条记录,但是没有记录正在返回。也就是说,没有匹配WHERE子句条件的记录。

在尝试阅读之前,您应该检查是否存在记录。使用SqlDataReader时,通常通过检查Read()方法的布尔结果来完成。例如:

While myReader.Read()
    ' read the values here, for example:
    myReader.GetString(0)
End While

只要myReader.Read()评估为False,就意味着查询结果中不再有记录。如果在第一次尝试时评估为False,则表示查询结果中没有记录。

答案 1 :(得分:0)

来自此处显示的YouTube视频:https://www.youtube.com/watch?v=iyjGP4fP7IE

代码myReader.HasRows将毫不费力地检查数据库。

我的新代码:

myConn = New SqlConnection(My.Settings.MySQLData)

    myCmd = myConn.CreateCommand

    myCmd.CommandText = "SELECT Email, Password FROM dbo.[User]" &
                        " WHERE Email = '" & tbEmail.Text & "'" &
                        " AND Password = '" & tbPassword.Text & "'"

    myConn.Open()
    myReader = myCmd.ExecuteReader



    If myReader.HasRows Then
        LoginScreen.Show()

    Else
        MessageBox.Show("Invalid Email or Password")

    End If



    myReader.Close()
    myConn.Close()

答案 2 :(得分:0)

如果当前结果集中没有行,则使用HasRows属性可以避免调用DataTableReader的Read方法。 - Msdn

     If reader.HasRows Then
       myReader.Read() 
     Else
       MessageBox.Show("no data present")
     End If