gpt4 book ai didi

c# - 对数据库的多次访问。如何防止不同的线程修改相同的数据?

转载 作者:行者123 更新时间:2023-11-29 13:48:37 26 4
gpt4 key购买 nike

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

不知道我是否表达清楚了。如果需要任何其他信息才能理解此问题,请发表评论。

最佳答案

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

LOCK TABLES someTableName WRITE;
...
UNLOCK TABLES;

特别是对于 SQLite,我发现了这个问题 Explicit locking mechanism in SQLite ,以该示例为例,您会看到类似的内容

BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

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

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

关于c# - 对数据库的多次访问。如何防止不同的线程修改相同的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17051879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com