我不知道它有什么问题,如果可能的话你可以分析一下

时间:2014-01-09 06:00:34

标签: system oledb

我的代码来自我的教授。我键入了正确的用户名和密码,但它继续说无效用户。表的名称也是正确的。我不知道为什么它继续说这是一个无效的用户,请帮助我。

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

2 个答案:

答案 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语句。