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

VB.NET登录验证后程序终止:需返回表单重新输入凭证

问题解决:VB.NET登录表单无法返回重新填写的修复

问题根源

  1. 代码末尾强制执行Me.Hide(),无论登录成功/失败/空字段场景,都会隐藏当前表单,导致程序看似终止
  2. 空字段判断逻辑存在漏洞:仅当用户名和密码同时为空时才触发提示,单个字段为空时无法检测
  3. 存在SQL注入风险,且未对数据库操作做异常处理

修改后的完整代码

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim user As String = TextBox1.Text.Trim()
    Dim pword As String = TextBox2.Text.Trim()

    ' 先做空字段校验,无需提前连接数据库
    If String.IsNullOrWhiteSpace(user) OrElse String.IsNullOrWhiteSpace(pword) Then
        MsgBox("请填写完整的用户名和密码")
        TextBox1.Focus() ' 定位到用户名输入框,方便重新填写
        Return ' 终止后续代码执行,停留在当前表单
    End If

    Try
        ConnectToDB()
        ' 使用参数化查询避免SQL注入
        sql = "select * from rfidmaintest.administrator where username = @user And pword = @pword"
        cmd = New MySqlCommand(sql, cn)
        cmd.Parameters.AddWithValue("@user", user)
        cmd.Parameters.AddWithValue("@pword", pword)
        dr = cmd.ExecuteReader

        If dr.HasRows Then
            Me.Hide()
            admin.ShowDialog()
            ' 管理员窗口关闭后,重新显示登录表单(可根据需求选择保留或移除)
            Me.Show()
        Else
            MsgBox("用户不存在或密码错误")
            TextBox1.Clear()
            TextBox2.Clear()
            TextBox1.Focus()
        End If
    Catch ex As Exception
        MsgBox("数据库连接异常:" & ex.Message)
    Finally
        ' 确保数据库资源被正确释放,无论是否发生异常
        If dr IsNot Nothing AndAlso Not dr.IsClosed Then
            dr.Close()
        End If
        If cn IsNot Nothing AndAlso cn.State = ConnectionState.Open Then
            cn.Close()
        End If
        cmd = Nothing
    End Try

    ' 移除原代码中强制执行的Me.Hide()
End Sub

关键修改说明

  • 移除全局Me.Hide():仅在登录成功时隐藏当前表单,其他场景保留表单显示
  • 修复空字段判断:用String.IsNullOrWhiteSpace检测单个字段是否为空,覆盖所有未填场景,且添加Return直接终止后续代码,停留在当前表单
  • 参数化查询:替换字符串拼接的SQL写法,彻底避免SQL注入风险
  • 异常处理:用Try-Catch-Finally确保数据库资源被正确释放,同时捕获并提示连接异常
  • 体验优化:清空输入框后自动聚焦到用户名,减少用户操作步骤;管理员窗口关闭后可自动恢复登录表单显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:50:30