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

Visual Basic关联MySQL的登录按钮代码运行报错,请问问题出在哪里?

代码存在的问题
  • 重复初始化数据库连接对象,冗余且易引发异常:先实例化了空的MySqlConnection,又再次实例化带连接串的对象,还在With块里重复赋值连接字符串,属于无意义的重复操作。
  • 用户名、密码参数与查询字段完全倒置:SQL语句中User_Name字段匹配的是密码输入框Pass_txtbx.Text,Password字段匹配的是用户名输入框UserN_txtbx.Text,直接导致合法账号也无法匹配登录。
  • 用Const修饰动态字符串引发语法错误:V被定义为常量,但拼接了文本框的动态输入值,不符合常量编译时确定值的要求,运行时会直接报错。
  • 字符串拼接SQL存在两大风险:一是用户输入含单引号时会触发SQL语法错误,二是存在严重的SQL注入漏洞,攻击者可通过特殊输入绕过登录甚至篡改数据库。
  • 数据库资源未释放:MySqlConnection、MySqlCommand、MySqlDataReader使用后未主动关闭释放,长期运行会造成连接池资源泄漏。
  • 异常捕获范围不全:仅捕获MySqlException,其他运行时异常(如空引用、控件访问异常)会直接抛出无处理,且异常触发时已打开的数据库连接不会自动关闭。
  • 查询效率低下:没必要通过遍历DataReader计数,直接执行COUNT(*)查询配合ExecuteScalar性能更高。
修正后的参考代码
Private Sub LogIn_btn_Click(sender As Object, e As EventArgs) Handles LogIn_btn.Click
    ' 仅初始化一次连接,用Using自动释放资源
    Using dbconn As New MySqlConnection("Data Source=localhost;user id=root;password=root;database=oeas")
        Try
            dbconn.Open()
            ' 参数化查询,避免注入和语法问题
            Dim query As String = "SELECT COUNT(*) FROM oeas.users WHERE User_Name = @UserName AND Password = @PassWord"
            Using sqlcmd As New MySqlCommand(query, dbconn)
                ' 对应添加参数,注意字段和输入框对应关系
                sqlcmd.Parameters.AddWithValue("@UserName", UserN_txtbx.Text.Trim())
                sqlcmd.Parameters.AddWithValue("@PassWord", Pass_txtbx.Text.Trim())
                
                Dim count As Integer = Convert.ToInt32(sqlcmd.ExecuteScalar())
                If count = 1 Then
                    MessageBox.Show("username and password are correct")
                    Profile_form.Show()
                    Me.Hide()
                ElseIf count > 1 Then
                    MessageBox.Show("username and password are duplicate")
                Else
                    MessageBox.Show("username and password are not correct")
                End If
            End Using
        Catch ex As Exception
            MsgBox("操作错误: " & ex.Message)
        End Try
    End Using ' 退出Using块自动关闭释放连接
End Sub

内容的提问来源于stack exchange,提问作者Antony Sydney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:07