2014-01-09 37 views
-1

我有我的代碼從我的教授。我輸入了正確的用戶名和密碼,但它一直說無效的用戶。表格的名稱也是正確的。我不知道爲什麼它一直說這是一個無效的用戶請好心幫助我。我不知道它有什麼問題,你可以分析,如果可能

If Len(Trim(txtUsername.Text)) = 0 Then 
     MessageBox.Show("Please enter user name", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     txtUsername.Focus() 
     Exit Sub 
    End If 
    If Len(Trim(txtPassword.Text)) = 0 Then 
     MessageBox.Show("Please enter password", "Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     txtPassword.Focus() 
     Exit Sub 
    End If 

    Dim query As String = "SELECT * FROM Users" 
    Dim dt As New DataTable 
    ExecuteQuery(query) 

    Dim ctr As Integer 
    If dt.Rows.Count > 0 Then 
     If (dt.Rows(ctr)("Username")) = txtUsername.Text Then 
      If (dt.Rows(ctr)("Password")) = txtPassword.Text Then 
       frmMainMenu.Show() 
       Me.Hide() 
      End If 
     Else 
      MsgBox("Incorrect password") 
      txtPassword.Text = "" 
      txtPassword.Focus() 
     End If 
    Else 
     MsgBox("Invalid user") 
     txtPassword.Text = "" 
     txtUsername.Text = "" 
     txtUsername.Focus() 

    End If 
+1

那麼你選擇整個表,它將返回列表中的所有用戶,然後你將用戶名和密碼與其中的一個進行比較,而不是全部。你的SQL應該是參數化的,你應該執行一些類似於'SELECT * FROM Users WHERE username =?和密碼=?' – Namphibian

回答

0

您從不初始化dt數據表。所以一個新的DataTable將有0行,並且您將落入If dt.Rows.Count > 0的Else中。我認爲你已經打算讓dt成爲ExecuteQuery語句產生的DataTable,但是由於你既沒有傳遞dt也沒有將結果從ExecuteQuery分配給dt變量,它仍然是空白的。

不知道什麼的executeQuery呢,我會想象它應該是

ExecuteQuery(query, dt) 

dt = ExecuteQuery(query) 

這點之後,你可能會下降到預期的用戶名/密碼比較塊,如果有實際上是用戶表中的行。

但是,除非匹配記錄是DataTable中的第一個匹配,否則您的匹配將不起作用,因爲您從不實際迭代/增加ctr。

0

這是我的executeQuery代碼()

Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\nikko\Documents\Visual Studio 2010\Projects\PayrollSystemThesis\PayrollSystemThesis\bin\Debug\Thesis.accdb" 
Public Function ExecuteQuery(ByVal query As String) As DataTable 
    Try 
     Dim dbCon As New OleDbConnection(connectionString) 
     Dim dbDA As New OleDbDataAdapter(query, dbCon) 
     Dim dbCB As New OleDbCommandBuilder(dbDA) 
     Dim dbDT As New DataTable 
     dbDA.Fill(dbDT) 
     Return dbDT 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
     Return Nothing 
    End Try 
End Function 

它讀取SQL語句。

相關問題