【发布时间】:2021-02-19 02:25:39
【问题描述】:
这是我的代码:
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 语句中产生结果。
【问题讨论】:
-
鉴于,顾名思义,
GetString返回一个String,那么在结果上调用ToString有什么意义?这并没有什么坏处,但它表明您实际上并没有考虑您的数据类型,这总会在某个时间导致问题。此外,如果要连接Strings,请使用连接运算符 (&) 而不是加法运算符 (+)。他们在许多情况下做同样的事情,但不是全部。前者总是做正确的事,所以总是使用它,你就不会出错。 -
至于问题,调试你的代码。您应该在此处发布之前完成此操作。如果这两个值始终在该行上匹配,则这两个值始终相同。你想让我们怎么做?您可以自行调试代码并查看数据的来源,以及代码的行为与预期不同的确切位置和方式。至少,您应该能够告诉我们这是在哪里以及如何进行的。如果来自您的数据库的数据不是您所期望的,那么要么您的数据库有误,要么您的查询有误。
-
最后,您应该学习如何在 ADO.NET 中使用参数,因为您构建查询的方式存在各种各样的问题,尤其是安全性。
-
问题已编辑!
-
@jmcilhinney tbh 我只是在按照我们的教授教我们做的事情做:/为很多错误道歉!
标签: sql-server vb.net