为什么用户在使用具有共享字符串连接的 C# 连接到 MS Access 时会出现锁定错误?

问题描述 投票:0回答:1

我有一个使用 C# 的 WPF 应用程序,它连接到 MS Access 文件来读取和写入用户输入的数据,并且几乎每天都有大约 20 个用户使用该应用程序(一次可能有大约 5 个用户同时运行)它)。为此,我使用

OleDbConnection
类,但是发生了有关文件锁定的错误,例如

System.Data.OleDb.OleDbException(0x80004005):用户“管理员”已将数据库置于阻止其打开或阻止的状态。

System.Data.OleDb.OleDbException(0x80004005):无法锁定文件。

System.Data.OleDb.OleDbException(0x80004005):无法使用“db.accdb”。文件已在使用。

当我尝试打开与数据库的连接时,总是会抛出这些错误。经过一番研究,我发现了很多关于SO(如thisthis甚至this)以及其他存储库的问题,并且它们都倾向于在打开Access文件时引用访问模式。

我已经尝试将连接字符串设置为

$"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={ DBPath }; Mode = Share Deny None; Persist Security Info=False;"
根据

此来源,指定不应拒绝读取或写入访问,但用户不断收到错误。

如何解决这个问题?

c# ms-access exception connection-string
1个回答
0
投票
您的解决方案可能正在使用锁

lock (x) { // open connection // Your code... // close connection }
MS Access 不适合多个用户连接!

MS Access 专为单用户使用而设计。当多人尝试同时通过网络访问它时,它会遇到严重的性能问题。虽然技术限制是 255 个并发用户,但即使有 5-10 个用户,它也会变得非常慢。

TLDR;

https://learn.microsoft.com/en-us/office/troubleshoot/access/lock-files-introduction

© www.soinside.com 2019 - 2024. All rights reserved.