如何阻止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
相关产品推荐
相关产品推荐

