同时从许多应用程序读取和写入单个Ms Access数据库

时间:2011-10-11 20:34:38

标签: c# ms-access jet

我已经测试了这个,我可以看到可以从多个应用程序(或同一个应用程序的同一个实例)中多个已打开的OleDbConnection到同一个Access数据库,甚至有很多{{1同时打开。

但这样安全吗?我应该特别小心,还是OleDbDataReader引擎会照顾好一切?如果我在同时写入同一个表时读取一个数据表会发生什么?

我只是不想在以后偶然发现陷阱或惊喜。

4 个答案:

答案 0 :(得分:2)

访问通常不是并发数据活动的引擎。您有没有理由避免使用MySQL或Oracle或其他适当的RDBMS?

一些原因:

- 您无法保证读取一致的视图 - 你很有可能在不知情的情况下更新更新的记录 - 您可能会遇到无法解决的锁具 - 你没有集中的交易经理

答案 1 :(得分:1)

Access不是为并发使用而设计的。您应该使用其他数据库进行调查。 Here's关于这个问题的优秀文章。

答案 2 :(得分:0)

直接回答您的问题What would happen if I'm reading one data table while writing to the same table at the same time?

取决于默认IsolationLevel。您可以在Protecting Your Data Integrity with Transactions in ADO.Net了解隔离级别以及如何指定它们。

但正如其他人所说,请使用别的东西。 SQL Server 2008 Express功能齐全,大部分都是免费的。如果您仍然希望能够在不安装服务器软件的情况下使用数据库,我甚至会建议使用SQL Server Compact Edition而不是Access。

答案 3 :(得分:0)

我的个人经验是,对于5到10个用户(每个用户有1个连接),“用户可以通过在表单中​​输入一些输入来输入更多数据”,在本地网络中使用,Access可以作为后端。这篇文章反映了我的个人经历:

http://www.tek-tips.com/faqs.cfm?fid=4462

您应该寻找“真正的”客户端/服务器数据库的真正限制和重点在很大程度上取决于您的环境细节 - 如果您想知道,则必须运行自己的基准测试。

关于对表的并发读/写:Access使用底层文件系统的字节范围锁定功能来处理冲突(有关更多信息,请参阅此处http://en.wikipedia.org/wiki/File_locking)。这种机制适用于大多数现代文件系统,如NTFS,但不能很好地扩展到许多用户。