【问题标题】:i don't know what's wrong with it can you analyze if possible我不知道有什么问题你能分析一下吗?
【发布时间】:2014-01-09 06:00:33
【问题描述】:

我的代码基于我的教授。我输入了正确的用户名和密码,但它一直说无效用户。表的名称也是正确的。我不知道为什么它一直说它是一个无效用户请帮助我。

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

【问题讨论】:

  • 那么您选择整个表,这将返回列表中的所有用户,然后您将用户名和密码与其中一个而不是所有用户进行比较。你的 SQL 应该被参数化,你应该执行类似SELECT * FROM Users WHERE username=? and password=?

标签: system oledb


【解决方案1】:

您永远不会初始化 dt DataTable。因此,一个新的 DataTable 将有 0 行,您将陷入 If dt.Rows.Count > 0 的 Else。我想你本来打算让 dt 成为 ExecuteQuery 语句产生的 DataTable,但由于你既没有将 dt 传入也没有将 ExecuteQuery 的结果分配给 dt 变量,所以它仍然是空白的。

不知道 ExecuteQuery 是做什么的,我想它应该是

ExecuteQuery(query, dt)

dt = ExecuteQuery(query)

在这之后,如果用户表中确实有行,您可能会陷入预期的用户名/密码比较块。

但是,除非匹配记录是 DataTable 中的第一个记录,否则您的匹配仍然不起作用,因为您实际上从未迭代/递增 ctr。

【讨论】:

    【解决方案2】:

    这是我的 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 语句。

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多