多用户MS Access数据库 - 如何完全锁定

时间:2014-12-05 21:50:06

标签: c# ms-access locking multi-tenant

我们的网络上有一个MS Access数据库(accdb),多个用户将编辑&通过.NET应用程序读取。我知道像SQL Server这样的服务器数据库将是这种情况的最佳选择,但目前还不在我的手中。

.Net应用程序将使用ADO.Net(即OleDBConnections)和Microsoft.Office.Interop.Access.Dao命名空间内的工具连接到数据库。

我已经阅读了一些关于连接到Access的多个用户的文章和帖子,并且在这方面似乎存在一些关于Access功能的混淆和不同意见。我如何/可以在我的申请中实现以下目标:

  1. 建立连接以写入数据库,这将锁定整个数据库(所有记录和表),直到连接结束。如果其他尝试同时写入的用户被例外暂停,那就没关系。
  2. 建立指定为只读的连接,与任何其他用户的操作无冲突。
  3. 感谢。

1 个答案:

答案 0 :(得分:6)

要以独占模式打开ACCDB,您需要将此键/值添加到连接字符串

Mode=Share Exclusive;

这会阻止其他用户连接到同一个数据库,直到您关闭并处置它为止 以这种方式打开数据库的连接。

如果我记得很清楚,JET连接字符串中Mode关键字的可能值(非常自我解释)是

Mode='Read'; 
Mode='Write'; 
Mode='ReadWrite'; 
Mode='Share Deny None'; 
Mode='Share Deny Read'; 
Mode='Share Deny Write'; 
Mode='Share Exclusive'; 

我已经尝试了上面标志的各种组合,但我找不到一个简单的解决方案,允许在ReadWrite中打开单个连接,而以下连接自动回退到只读。可能在您的场景中,最佳路径是拥有本地连接(不是全局连接),如果您需要写入数据库并尝试在数据库中打开异常,如果无法打开数据库,请尝试在Share Exclusive中打开它用户重试选项。我知道这不是一条简单的道路。让我们看看对MS-Access有更好了解的用户是否可以提供更精细的解决方案。

我同意上面的评论(以及您自己的评估),这不是在并发情况下使用的最佳数据库工具,但现在事情要好得多。
我发现this answer写得很好,很全面,并且对于并发问题的Access的优缺点有着平衡的看法。