我们的网络上有一个MS Access数据库(accdb),多个用户将通过一个.NET应用程序进行编辑和读取。我知道像server这样的服务器数据库将是这种情况下的最佳选择,但目前这是我无法控制的。
.Net应用程序将使用ADO.Net (即OleDBConnections)和Microsoft.Office.Interop.Access.Dao命名空间中的工具连接到数据库。
我读过几篇关于多个用户连接到访问的文章和文章,在这方面,对于Access的功能似乎有些混淆和不同的看法。如何在我的应用程序中实现以下目标:
谢谢。
发布于 2014-12-05 22:03:02
若要以独占模式打开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中打开它,如果不能打开数据库,则捕获异常,给用户一个重试选项。我知道这不是一条容易的路。让我们看看一个拥有更多more知识的用户是否能给出一个更精细的解决方案。
我同意上面的评论(以及您自己的评估),这不是在并发情况下使用的最好的数据库工具,但是现在的情况要好得多。
我发现this answer写得很好,比较全面,并且对并发问题的访问能力和弱点有着平衡的看法。
https://stackoverflow.com/questions/27325219
复制相似问题