我们的网络上有一个MS Access数据库(accdb),多个用户将编辑&通过.NET应用程序读取。我知道像SQL Server这样的服务器数据库将是这种情况的最佳选择,但目前还不在我的手中。
.Net应用程序将使用ADO.Net(即OleDBConnections
)和Microsoft.Office.Interop.Access.Dao
命名空间内的工具连接到数据库。
我已经阅读了一些关于连接到Access的多个用户的文章和帖子,并且在这方面似乎存在一些关于Access功能的混淆和不同意见。我如何/可以在我的申请中实现以下目标:
感谢。
答案 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的优缺点有着平衡的看法。