2016-04-25 77 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()