【问题标题】:Readonly connection string to an access database访问数据库的只读连接字符串
【发布时间】:2011-08-22 00:36:21
【问题描述】:

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

我试过了:

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;"

谢谢。

编辑:

(我应该在原始问题中提供更多信息。)

我可以在 local 机器上成功连接到 access 数据库,但是当我尝试使用连接字符串连接到 remote 机器上的 access 数据库时

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 服务中运行。

【问题讨论】:

  • 尝试将模式设置为“adModeRead”(不带引号)。 See MSDN Reference。 (不做这个答案,因为我无法验证它是否有效,只是关闭 MSDN 数据。)
  • 我尝试将 Mode 设置为 'adModeRead' 但它会引发 'System.Data.OleDb.OleDbException (0x80040E73):初始化字符串的格式不符合 OLE DB 规范。'感谢您的建议。

标签: ms-access connection-string oledb


【解决方案1】:

真正的问题是 Excel 会在文件关闭之前保持连接打开。

在 Excel 2007+ 中,MaintainConnection 设置默认设置为 true。您需要进入 vb 编辑器并使用代码将其变为 false。我还没有看到通过可视界面执行此操作的方法。 即使您将连接字符串设置为只读,它也会锁定访问数据库(根据我的经验)。

对于可枢轴连接:

Sheets("sheet1").PivotTables("pivottable1").PivotCache.MaintainConnection = False

对于查询表:

Range("A2").Select
Selection.ListObject.QueryTable.MaintainConnection = False
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

通过将其设置为false,表将连接,运行命令,然后断开连接,释放锁。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你是对的。这是一个权限问题。如果我在原始问题中提供更多信息,我认为它会更明显。在我使用具有提升权限(读取远程访问数据库的权限)的用户运行我的 Windows 服务后,它开始使用连接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Mode=Read 它只是没有单击我的服务没有以相同的方式运行我的用户拥有的权利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2012-04-24
    • 2016-05-11
    相关资源
    最近更新 更多