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

VB.NET连接MS-ACCESS数据库提示‘File already in use’问题求助

解决Access数据库打开时VB.NET程序报“文件已在使用中”的问题

打开MS-ACCESS数据库文件后运行VB.NET应用程序,会触发“文件已在使用中”错误;不打开该数据库时,程序可正常运行。以下是针对该问题的分析和解决方案:

问题代码

Imports System.Data.OleDb

Public Class Form1
    Dim Path As String = "|DataDirectory|\students.accdb"
    Private WithEvents dt As New DataTable
    Dim cn = "Provider=Microsoft.ACE.OLEDB.12.0; data source=" & Path & "; Persist Security Info=False;"
    Private Sub PopulateDataGridView()
        Try
            dt = New DataTable
            Dim query = "select * FROM [students]"
            Using adapter As New OleDbDataAdapter(query, cn.ToString)
                adapter.Fill(dt)
            End Using
            Me.DataGridView1.DataSource = dt
        Catch myerror As OleDbException
            MessageBox.Show("Error: " & myerror.Message)
        Finally
            'cn.Dispose()
        End Try
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.PopulateDataGridView()
    End Sub
End Class

相关截图

错误提示:文件已在使用中
Access客户端设置:默认打开模式为独占

解决方案

1. 修改Access的默认打开模式

从截图可见,当前Access客户端的默认打开模式为独占,这会导致数据库被Access独占锁定,VB.NET程序无法访问。操作步骤:

  • 打开Access软件,点击「文件」→「选项」→「客户端设置」
  • 将「默认打开模式」从“独占”改为“共享”
  • 保存设置后,关闭并重新打开Access数据库

2. 优化VB.NET连接字符串

在连接字符串中添加共享访问模式参数,强制允许多程序同时访问数据库:
修改连接字符串为:

Dim cn = "Provider=Microsoft.ACE.OLEDB.12.0; data source=" & Path & "; Mode=Share Deny None; Persist Security Info=False;"

Mode=Share Deny None参数表示不拒绝任何共享访问请求,确保VB.NET程序和Access可以同时连接数据库。

3. 代码检查

现有代码中使用Using块处理OleDbDataAdapter是正确的,Fill方法会自动管理连接的打开和关闭,无需额外手动释放连接。若后续有其他数据库操作,确保所有数据库对象(如OleDbConnection)都用Using块包裹,避免连接泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:53:17