2016-04-25 32 views
-1

我有一个登录表单,我需要检查我的数据库电子邮件和密码的用户输入是否与数据库匹配。VB.net SqlDataReader如何显示messagebox如果GetString函数有空值?

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() 

这只是电子邮件部分。我也有一个密码部分,我还没有投入。

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

+0

定义“不起作用”。它以什么特定的方式失败?另请注意,您的代码已广泛应用于SQL注入。您应该使用查询参数,而不是直接执行用户输入作为代码。 – David

+0

当数据不存在时无效尝试读取。 – iamhx

回答

0

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

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

但是,密码似乎不区分大小写。有没有办法解决这个问题? – iamhx

0

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

无效尝试时不存在数据读取。

这意味着代码假定至少一个记录是由SQL查询返回,但没有记录返回。也就是说,没有与条款WHERE条款匹配的记录。

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

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

只要myReader.Read()的计算结果为False,这意味着没有更多的记录存在于查询结果。如果在第一次尝试时评估结果为False,那意味着查询结果中没有记录。

0

从这里显示的YouTube视频:https://www.youtube.com/watch?v=iyjGP4fP7IE

代码myReader.HasRows将检查对没有麻烦的数据库。

我的新代码:

的myconn =新的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()