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

如何阻止VB.NET登录表单空输入时仍跳转至其他表单?

VB.NET登录表单空值验证问题修复

问题根源

你的代码存在三个核心问题,导致空文本框时仍可能触发页面跳转:

  • 空值验证未终止后续代码执行:即使弹出错误提示,后续的数据库查询、跳转逻辑依然会运行。若数据库中恰好存在用户名/密码为空的记录,就会直接跳转。
  • 空值判断不严谨:TextBox.Text = Nothing的判断方式不可靠,TextBox的Text属性默认是String.Empty而非Nothing,会遗漏部分空值场景。
  • 数据库参数添加格式错误:AddWithValue的用法不符合规范,会导致参数类型匹配异常。

修复步骤及代码

1. 完善空值验证并终止执行

在空值判断的If块末尾添加Exit Sub,确保验证不通过时直接结束按钮点击事件,不执行后续操作。

2. 使用严谨的空值判断方法

改用String.IsNullOrWhiteSpace()判断文本框内容,同时检查Trim后的结果,避免用户输入纯空格的情况。

3. 修正数据库参数添加方式

OleDbCommand.Parameters.Add的正确用法是指定参数名、类型后赋值;若用AddWithValue,则直接传入参数名和对应值即可。

修改后的完整代码

Imports System.Data.OleDb
Imports System.Windows.Forms

Public Class Form1

    Dim con As New OleDbConnection
    Dim dbProvider As String = "Provider=Microsoft.ACE.OLEDB.12.0;"
    Dim dbSource As String = "Data Source=C:\Users\Kuraku\source\repos\Program\Database1.accdb;"

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        con.ConnectionString = dbProvider & dbSource
        Me.CenterToScreen()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 验证账号密码是否为空或纯空格
        If String.IsNullOrWhiteSpace(TextBox1.Text.Trim) Or String.IsNullOrWhiteSpace(TextBox2.Text.Trim) Then
            MessageBox.Show("请输入正确的账号和密码", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub ' 终止后续代码执行
        End If

        Try
            ' 确保数据库连接打开
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If

            Using login As New OleDbCommand("SELECT COUNT(*) FROM Table1 WHERE [USERNAME] = @USERNAME AND [PASSWORD] = @PASSWORD", con)
                ' 正确添加参数并赋值
                login.Parameters.Add("@USERNAME", OleDbType.VarChar).Value = TextBox1.Text.Trim
                login.Parameters.Add("@PASSWORD", OleDbType.VarChar).Value = TextBox2.Text.Trim

                Dim logincount = Convert.ToInt32(login.ExecuteScalar())
                If logincount > 0 Then
                    Form4.Show()
                    Me.Hide() ' 登录成功后隐藏当前表单
                Else
                    MessageBox.Show("账号或密码错误,请重新输入", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    TextBox1.Clear()
                    TextBox2.Clear()
                    TextBox1.Focus() ' 聚焦到账号输入框,方便重新输入
                End If
            End Using
        Catch ex As Exception
            ' 捕获数据库操作异常,避免程序崩溃
            MessageBox.Show($"数据库操作出错:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            ' 确保无论是否异常,数据库连接都会关闭
            If con.State = ConnectionState.Open Then
                con.Close()
            End If
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Hide()
        Form2.Show()
    End Sub
End Class

额外优化说明

  • 增加异常捕获:用Try-Catch-Finally包裹数据库操作,避免因连接失败、SQL错误等导致程序崩溃。
  • 登录成功后隐藏当前表单:提升用户操作流畅度。
  • 清空文本框后自动聚焦:减少用户重复操作步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:58:12