我的代码来自我的教授。我键入了正确的用户名和密码,但它继续说无效用户。表的名称也是正确的。我不知道为什么它继续说这是一个无效的用户,请帮助我。
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
答案 0 :(得分:0)
您永远不会初始化dt DataTable。因此,新的DataTable将有0行,您将属于If dt.Rows.Count > 0
的其他行。我认为你原本打算将dt作为由ExecuteQuery语句产生的DataTable,但由于你既没有传递dt,也没有将ExecuteQuery的结果分配给dt变量,它仍然是空白的。
不知道ExecuteQuery的作用,我想它应该是
ExecuteQuery(query, dt)
或
dt = ExecuteQuery(query)
如果Users表中实际存在行,那么您可能会落入预期的用户名/密码比较块。
但是,除非匹配记录是DataTable中的第一个,否则您的匹配仍然无效,因为您从未实际迭代/增加ctr。
答案 1 :(得分: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语句。