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

Tek*_*ito 2 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. 建立指定为只读的连接,与任何其他用户的操作没有冲突.

谢谢.

Ste*_*eve 6

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

Mode=Share Exclusive;
Run Code Online (Sandbox Code Playgroud)

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

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

Mode='Read'; 
Mode='Write'; 
Mode='ReadWrite'; 
Mode='Share Deny None'; 
Mode='Share Deny Read'; 
Mode='Share Deny Write'; 
Mode='Share Exclusive'; 
Run Code Online (Sandbox Code Playgroud)

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

我同意上面的评论(和你自己的评估),这不是在并发情况下使用的最好的数据库工具,但现在事情要好得多.
我发现这个答案写得很好,很全面,并且对于并发问题的Access的优缺点有一个平衡的观点.