我正在尝试使用System.Data.OleDb.OleDbConnection连接到Access数据库文件。我需要以只读模式连接,因为另一个应用程序同时使用它。我可以在读/写连接到数据库没有问题,但似乎无法找到任何正确的readonly字符串。
我试过了:
Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Persist Security Info = False; Mode = Read
Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Persist Security Info = False; Extended Properties =“ReadOnly = true;”
感谢。
修改
(我应该在原始问题中提供更多信息。)
当它位于本地计算机上时,我可以成功连接到访问数据库,但是当我尝试使用连接字符串连接到远程计算机上的访问数据库时
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read
我会收到以下错误:
System.Data.OleDb.OleDbException (0x80004005): The Microsoft Office Access database engine cannot open or write to the file '{0}'. It is already opened exclusively by another user, or you need permission to view and write its data.
我的应用程序在本地系统帐户下的Windows服务中运行。
答案 0 :(得分:2)
我认为必须通过数据库管理员可以控制的用户权限来处理,或者使用您可以控制的记录集的不同游标类型来处理。我不认为连接字符串指定访问模式,它只是让你到那里。 ;)
答案 1 :(得分:2)
真正的问题是Excel会在文件关闭之前保持连接处于打开状态。
在Excel 2007+中,MaintainConnection设置默认设置为true。您需要进入vb编辑器并使用代码将其变为false。我还没有看到通过可视化界面实现此目的的方法。 即使您将连接字符串设置为只读,它也会锁定访问数据库(根据我的经验)。
对于可枢转连接:
Sheets("sheet1").PivotTables("pivottable1").PivotCache.MaintainConnection = False
对于QueryTable:
Range("A2").Select
Selection.ListObject.QueryTable.MaintainConnection = False
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
通过将其设置为false,表将连接,运行命令,然后断开连接,释放锁定。