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

VB.NET使用OleDb操作Access报Fill相关InvalidOperationException错误问询

错误触发原因
  • 核心问题是OleDbCommand构造函数的传参语法错误:你将连接对象conn写在了SQL语句的字符串引号内部,导致构造函数只接收到了一个包含错误后缀的SQL字符串,没有给命令对象关联对应的数据库连接,执行Fill方法时无法找到有效连接就抛出该异常。
  • 附加问题:代码没有对数据库连接、命令对象做资源释放管理,存在资源泄漏的潜在风险。
修复后完整代码
Imports System.Data
Imports System.Data.OleDb

Public Class Form1
    Private Sub btnlogin_Click(sender As Object, e As EventArgs) Handles btnlogin.Click
        ' 使用Using包裹连接对象,执行完自动释放资源
        Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Katlego\Documents\LoginDb.accdb")
            ' 修正构造函数参数,将conn移出SQL字符串引号,正确关联连接
            Using cmd As New OleDbCommand("select * from logintable where username1=@username1 and password1=@password1", conn)
                cmd.Parameters.Add("@username1", OleDbType.VarChar).Value = txtusername.Text
                cmd.Parameters.Add("@password1", OleDbType.VarChar).Value = txtpassword.Text
                Dim adapter1 As New OleDbDataAdapter(cmd)
                Using logintable As New DataTable
                    adapter1.Fill(logintable)
                    If logintable.Rows.Count <= 0 Then
                        MsgBox("error username or password")
                    Else
                        MsgBox("login successful")
                    End If
                End Using
            End Using
        End Using
    End Sub
End Class
调整说明
  • 修正了OleDbCommand构造函数的参数错误,把conn移出SQL字符串引号,成功给命令对象关联数据库连接。
  • 用Using语句包裹连接、命令、数据表对象,执行结束后自动释放资源,无需手动调用Close或Dispose方法,避免资源泄漏。
  • 移除了无意义的unused变量声明,Fill方法的返回值无需额外变量接收。
  • 修正了提示文本中sucessfull的拼写错误为successful,如果需要中文提示可直接替换引号内的文本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:45:03