4

我正在开发一个应用程序,该应用程序将由一小群工作人员(最多 15 人)使用,并将数据存储在 Access accdb 文件中。当我自己在一台机器上测试应用程序时,我没有任何问题,但是当至少有两个人不时连接到数据库时,应用程序会给用户带来奇怪的错误。数据库存储在网络上的共享文件夹中,每个用户的应用程序都访问该文件夹以打开 db 文件。每个用户在 db 的机器上都有自己的系统帐户,并且代码中的每个函数都会锁定其他线程对 db 的访问,因此一次总是只有一个连接打开尝试。每个连接都在同一个函数中关闭。所有 db 函数都写在一个单例类中。

我得到的错误:

System.Data.OleDb.OleDbException (0x80004005): Could not use 'D:\Shared\nscm\nscm_db.accdb'; file already in use.

System.Data.OleDb.OleDbException (0x80004005): Cannot open database ''.  It may not be a database that your application recognizes, or the file may be corrupt.

System.Data.OleDb.OleDbException (0x80004005): Too many active users. **(this error even when there's only two users!)**

这真让我抓狂。JET4/ACE 引擎不能正确支持多用户访问是否存在问题?

我正在考虑将数据库更改为不同的数据库,例如 MS SQL Server Express 或 MySQL,但我不知道哪个最容易迁移,哪些是真正免费的。

提前感谢您的帮助和关注!

更新:数据转换对我来说不是问题。该应用程序仍在开发中,因此没有真实数据。我更担心代码和 SQL 查询的变化。而且我不确定切换到其他db技术后是否会遇到其他问题。

我真正的问题是:我是否应该继续努力纠正现有技术中的某些问题,我正在使用还是 Access db 引擎存在已知问题,浪费我的时间在这方面毫无价值,开始使用会更简单、更快捷某种数据库服务器(MySQL)?

4

2 回答 2

3

你在这里如履薄冰。MSAccess 应该支持您的用户群,但在这种情况下您可以考虑迁移到不同类型的数据库。我的意思是,不是基于文件的数据库,而是客户端-服务器数据库。毕竟,如果您现在有 15 个用户,那么(希望)这个数字可能会增长,并且基于文件的数据库的问题将呈指数级增长。

如果您选择迁移,我可以说 SQLServer Express 和 MySql 都是免费的。
在你的情况下,我推荐 SQL Server Express。它的 T-SQL 语法与 JET-SQL 更兼容,但存在一些差异,尤其是在查询语法中使用 VBA 关键字时。
从代码的角度来看,我建议放弃 OleDbProvider 并开始使用 SqlServer 的本机提供程序。因此,您需要更改等效的 SqlConnection、SqlCommand 中的每个 OleDbConnection、OleDbCommand 等(如果您选择 MySql,这也是如此)。这些变化是相当机械和重复的,所以这里没有大问题。但是,您应该重新测试代码中的每个数据访问查询,以确保返回相同的结果

关于错误:

  • Too many active users- 这可能是由未正确关闭的连接引起的
  • Cannot open database- 数据库损坏或您已达到 2GB 限制?
  • Could not use- 检查所有用户退出应用程序后是否删除了 LDB 文件。同样,这可能是您的应用程序出现问题的症状
于 2012-04-07T21:50:34.563 回答
0

Mysql 是完全免费和开源的,我推荐它,因为它非常用户友好,转换部分使用这个:http ://www.bullzip.com/products/a2m/info.php

于 2012-04-07T21:46:22.640 回答