You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:57:25