如何在Visual Studio+VB中实现登录窗体Access数据库查询并解决报错
代码问题原因及修复方案
核心报错原因
你遇到的报错直接来源于SQL语句的语法错误:Access数据库查询中,文本类型的字段匹配值需要用英文单引号包裹。
你当前拼接的SQL逻辑,若用户在用户名输入框输入admin,最终生成的执行语句为:
Select * From tblLogin WHERE userName = admin
Access会把未加引号的admin识别为需要传值的参数,而非字符串匹配值,找不到对应参数赋值就会抛出No value given for one or more required parameters异常。
其他潜在问题
- 直接拼接用户输入到SQL语句存在SQL注入风险,攻击者可以通过特殊输入绕过登录校验、甚至篡改删除数据库数据
- 数据库连接用完后未主动关闭释放,长期运行会出现连接资源泄漏
修复后的代码(推荐参数化写法)
Imports System.Data.OleDb Public Class Login Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click ' 使用Using语句自动释放连接资源,无需手动Close Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\someone\source\repos\Test\Test\vs.mdb") con.Open() ' 用参数占位符替代拼接 Dim logincmd As New OleDbCommand("Select * From tblLogin WHERE userName = @UserName", con) ' 给参数赋值,自动处理格式转义 logincmd.Parameters.AddWithValue("@UserName", tbUser.Text) Dim loginrd As OleDbDataReader = logincmd.ExecuteReader() If loginrd.Read() Then MenuPage.Show() Me.Close() Else MsgBox("Sorry that's not right") End If End Using End Sub End Class
内容的提问来源于stack exchange,提问作者KDE
相关产品推荐
相关产品推荐

