首页 > 解决方案 > VB Net - SQL - 比较文本框的值和 SQL 值

问题描述

这是我的代码:

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Try
        myCmd = myConn.CreateCommand
        myCmd.CommandType = CommandType.Text
        myCmd.CommandText = ("SELECT * FROM login WHERE username = '" + txtboxUser.Text + "'")
        myCmd.ExecuteNonQuery()
        myReader = myCmd.ExecuteReader(CommandBehavior.CloseConnection)
        While myReader.Read
            UserVerifier = myReader.GetString(0).ToString()
            PassVerifier = myReader.GetString(1).ToString()
        End While
    Catch ex As Exception
        ErrorDB()
    End Try
    If String.IsNullOrEmpty(UserVerifier) Then
        MessageBox.Show("Username does not exist", "Login Failed.")
        txtboxUser.Clear()
        txtboxPassword.Clear()
        txtboxUser.Select()
    Else
        If txtboxPassword.Text = PassVerifier Then
            MessageBox.Show("Welcome" + txtboxUser.Text + "!", "Login Success!")
            Me.Hide()
            Form1.Show()
        Else
            MessageBox.Show("Incorrect Password", "Login Failed.")
            txtboxPassword.Clear()
            txtboxPassword.Select()
        End If
    End If
End Sub

并且似乎这行代码似乎不起作用,它总是不匹配:

If txtboxPassword.Text = PassVerifier Then
            MessageBox.Show("Welcome" + txtboxUser.Text + "!", "Login Success!")
            Me.Hide()
            Form1.Show()
        Else

我已经尝试过几种我研究过的解决方案,但它们似乎都不起作用。也许我的代码中缺少一些东西?有人可以向我解释为什么“PassVerifier = myReader.GetString(1).ToString()”不返回字符串数据类型吗?那它会得到什么?如何将其转换为与 txtboxPassword.Text 相同?我真的很困惑,请帮助。非常感谢。

编辑:即使 txtboxPassword.Text 和 PassVerifier 具有相同的结果,为什么 If 语句“If txtboxPassword.Text = PassVerifier Then”不能工作?我在获取数据或转换数据方面缺少什么吗?它总是通过它并且它总是导致 Else 语句。

标签: sql-servervb.net

解决方案


好的,您没有显示设置连接的位置和“cmd”变量。

这些不应该留给机会。

而且你没有在你的代码中显示你检查密码的地方。

我假设您在模块顶部完成了导入 system.data.SqlClient。

我假设您在项目“设置”中使用了 + 设置连接字符串。

因此,我们的代码将:

Check for user - if none tell user
Check for password - if none tell user

Check if user name exists - if not - tell user
Check if pasword match - if not - tell user.

因此,代码将如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If txtBoxUser.Text = "" Then
        MessageBox.Show("Please enter a user name", "No user name")
        Exit Sub
    End If

    If txtboxPassword.Text = "" Then
        MessageBox.Show("Please enter a password", "No password")
        Exit Sub
    End If

    Dim strSQL As String = "SELECT * FROM login "
    Dim MyTable As New DataTable

    Using cmdSQL As New SqlCommand("", New SqlConnection(My.Settings.TESTdb))

        cmdSQL.Connection.Open()

        cmdSQL.CommandText = strSQL & " WHERE username = @User"
        cmdSQL.Parameters.Add("@User", SqlDbType.NVarChar).Value = txtBoxUser.Text

        MyTable.Load(cmdSQL.ExecuteReader)

        If MyTable.Rows.Count = 0 Then
            MessageBox.Show("User name does not exist", "Logon Failed")
        Else
            ' name was ok - try name + password
            cmdSQL.CommandText = strSQL & " WHERE userName = @User AND Password = @Pass"
            cmdSQL.Parameters.Add("@Pass", SqlDbType.NVarChar).Value = txtboxPassword.Text
            MyTable.Clear()
            MyTable.Load(cmdSQL.ExecuteReader)
            If MyTable.Rows.Count = 0 Then
                MessageBox.Show("Password incorrect", "Password fail")
            End If
        End If

        ' get here without rows, then clear passwords info, or we are OK!!!
        If MyTable.Rows.Count = 0 Then
            txtBoxUser.Clear()
            txtboxPassword.Clear()
        Else
            MessageBox.Show("Welcome " & txtBoxUser.Text & "!", "Login Success!")
        End If

    End Using

End Sub

现在我们应该把它从按钮 sub 移到一个单独的“函数”,并让这个例程根据成功或失败返回真或假,但我会把这部分留给你(必须让你在这里做点什么!) .


推荐阅读