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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:57:03