【发布时间】:2016-06-03 10:07:02
【问题描述】:
在我的应用程序中,一次应该有一个用户在整个“会话”(他打开应用程序的时间跨度)中使用 Access DB 文件。当一个用户正在使用该文件时,该文件应被锁定。
我通过使用锁来做到这一点: How to lock a file with C#?
FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.None);
但是通过代码访问文件时,会抛出异常,例如:
// Connection points to file locked before
using (OleDbConnection connection = new OleDbConnection(Connection)) {
connection.Open();
//...
System.Data.OleDb.OleDbException 文件已被使用
如何访问以前锁定的文件?我是否总是必须在访问之前移除锁?如果是这样,如何确保文件在解锁、访问和重新锁定之间不被访问?
【问题讨论】:
-
Oledb、Access、Excel 文件共享无法正常工作。建议不要共享任何基于 oledb 的应用程序库。
-
在这种情况下有什么解决方案吗?就目前而言,我只能使用 Access 并且没有其他可能切换到。现在我自己创建了一个 Lock-File 并检查了这个文件是否存在,但这真的很可怕。
-
只需锁定另一个文件。如果您有
some.mdb,请在访问之前创建并独占打开some.mdb.lock。 -
@jdweng 顺便说一句,我确实想防止共享这些文件。
-
重点是使用另一个文件同步对该数据库文件的访问(基于文件的同步访问)。只有在成功锁定该文件后,您才允许该用户访问数据库。这是我能想到的最简单的方法(不管数据库是否支持多个连接,这是否可行)。其他选项是服务器/客户端架构,您不直接访问数据库,而是通过一些服务器来处理所有同步请求等等。 “只需使用任何其他程序打开 some.mdb” - 如果可以直接访问文件,则无法阻止此操作。
标签: c# database ms-access io locking