sql-server - 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 语句。
解决方案
好的,您没有显示设置连接的位置和“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 移到一个单独的“函数”,并让这个例程根据成功或失败返回真或假,但我会把这部分留给你(必须让你在这里做点什么!) .
推荐阅读
- deep-learning - 在不使用面部识别的情况下识别一个人的最佳方法(深度学习)
- sql-server - 超集 sqlalchemy 错误:没有名为“pymssql”的模块
- r - 从这个嵌套的 R 列表中提取数据的优雅、实用的方法
- node.js - 如何使用 req.body 保存猫鼬对象
- javascript - JavaScript 数组对象问题
- php - 重新调整大小/重新缩放 pdf 在 PHP 中留下白边
- mysql - MySql 别名与列名相同
- javascript - 是否可以在 chrome 控制台中显示对象的内容?
- reactjs - 是否可以将 OAuth 访问令牌传递给客户端
- aws-sdk-java-2.0 - AmazonAutoScalingAsync 客户端看不到 ASG(自动扩展组)