0

该应用程序将安装在最多 10 台机器上,其中一台也将用作服务器。一个与服务器永久同步的相同 DataGridView 将在所有这些视图上打开。不同的“用户”将具有不同的修改权限等。例如,他们所有人都可以删除表中的行,但只有创建行的人才能修改它等。我目前正在使用 SQLite服务器。显然,我需要使用 C#-s 套接字连接功能将客户端与服务器连接起来。问题是,在某些时候,其中一个客户端将尝试访问(例如删除)当前正在被另一个客户端修改的行。这可能会导致很多问题。据我所知,有一种称为数据库锁定的技术,这使您能够限制客户端对数据库的访问。我的问题是:在进行更改时锁定数据库是否方便?例如,将尝试访问数据库的函数会一次又一次地尝试这样做(在一种循环中),直到它看到它可以修改数据库。那会奏效吗?有没有更好的解决方案?也许其他一些数据库提供了类似于查询堆叠的多访问功能?

不知道我说清楚了没有。如果需要任何其他信息才能使此问题易于理解,请发表评论。

4

1 回答 1

1

对于初学者来说(因为我在 MySQL 标记中看到了这一点)这里是相关的 MySQL 手册页:http ://dev.mysql.com/doc/refman/5.0/en/lock-tables.html ,在这种情况下只是做

LOCK TABLES someTableName WRITE;
...
UNLOCK TABLES;

特别是使用 SQLite,我在 SQLite 中发现了这个 SO 问题Explicit locking mechanism,以这个例子为例,你会看到类似的东西

BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

然而,它也提到这将锁定整个数据库,而不仅仅是有问题的表。SQLite 文档的答案中包含的链接是http://sqlite.org/lang_transaction.html

总的来说,SQLite 可能不是您使用的最佳数据库,因为锁定整个数据库可能会造成相当大的瓶颈。如果可行的话,可能值得研究另一个能够更好地应对的数据库服务器,例如 MySQL。

于 2013-06-11T19:50:14.230 回答