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
相关截图


解决方案
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
相关产品推荐
相关产品推荐

