VB.NET登录表单:正确凭据时如何弹出对应MsgBox?
VB.NET MySQL登录表单凭据验证问题解决
你的两段代码存在的核心问题
第一段代码:
- 错误地把
cmd.CommandText的赋值逻辑写成了条件判断,cmd.CommandText初始为空,导致这个条件永远不成立,不管输入啥都会走Invalid Credentials分支 - 用
ExecuteNonQuery()处理SELECT语句完全错误,这个方法只适用于增删改操作,返回受影响行数,查询操作得用ExecuteScalar()或ExecuteReader()
- 错误地把
第二段代码:
- 根本没验证SQL查询是否返回有效数据,不管输入正确与否都会弹出登录成功的提示
- 同样误用了
ExecuteNonQuery(),而且直接拼接用户输入到SQL语句里,存在严重的SQL注入风险
正确的实现代码
Private Sub btLogin_Click(sender As Object, e As EventArgs) Handles btLogin.Click ' 使用Using语句自动释放数据库资源,避免泄漏 Using dhel As New MySqlConnection("替换成你的数据库连接字符串") Try dhel.Open() ' 参数化查询,彻底避免SQL注入 Dim query As String = "SELECT COUNT(*) FROM credentials_tb WHERE Username = @Username AND Password = @Password" Using cmd As New MySqlCommand(query, dhel) ' 绑定参数,传入用户输入的内容 cmd.Parameters.AddWithValue("@Username", tbUser.Text.Trim()) cmd.Parameters.AddWithValue("@Password", tbPwd.Text.Trim()) ' 执行查询,获取匹配的用户数量 Dim userCount As Integer = Convert.ToInt32(cmd.ExecuteScalar()) ' 根据结果判断登录状态 If userCount > 0 Then MsgBox("Login Successful.") Me.Hide() Else MsgBox("Invalid Credentials.") End If End Using Catch ex As Exception MsgBox($"登录出错: {ex.Message}") End Try End Using End Sub
关键说明
Using语句会自动处理连接和命令对象的释放,不用手动写Close(),更安全- 参数化查询是必须的,直接拼接用户输入会被黑客利用SQL注入攻击你的数据库
ExecuteScalar()专门用来执行只需要返回单个值的查询,这里统计匹配的用户数,大于0就说明凭据正确
内容的提问来源于stack exchange,提问作者straberrylyaaa
相关产品推荐
相关产品推荐

