2011-05-09 82 views
10

我试图使用System.Data.OleDb.OleDbConnection连接到Access数据库文件。我需要以只读模式连接,因为另一个应用程序在同一时间使用它。我可以在读/写连接到数据库没有问题,但似乎无法找到任何地方正确的字符串只读。只读连接字符串到访问数据库

我已经试过:

商= Microsoft.ACE.OLEDB.12.0;数据源= {0};坚持安全信息= FALSE;模式=读

提供商= Microsoft.ACE.OLEDB .12.0;数据源= {0};持久安全信息= False;扩展属性=“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服务运行。

+1

尝试将设置模式设置为“adModeRead”(不含引号)。 [见MSDN参考](http://msdn.microsoft.com/en-us/library/ms676693(v = vs.85).aspx)。 (不作这个答案,因为我无法验证它是否会起作用,只是关闭MSDN数据。) – 2011-05-09 22:09:55

+0

我试着将Mode设置为'adModeRead',但它引发'System.Data.OleDb.OleDbException(0x80040E73):Format的初始化字符串不符合OLE DB规范。'感谢您的建议。 – Smiffy 2011-05-26 12:22:08

回答

2

我认为这必须由数据库管理员控制的用户权限处理,或者使用您控制的记录集的不同光标类型来处理。我不认为连接字符串指定访问模式,它只是让你在那里。 ;)

+0

你是对的。这是一个权限问题。如果我在原始问题中提供更多信息,那么我认为它会更加明显。在我使用提升权限(读取远程访问数据库的权限)的用户运行windows服务后,它开始使用连接字符串:'Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Persist安全信息=假;模式=读'它只是没有点击,我的服务没有运行与我的用户有相同的权利。 – Smiffy 2011-05-26 12:39:53

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,该表将连接,运行命令,然后断开解除锁定。