繁体   English   中英

(my)SQL行锁定,而用户输入数据C#

[英](my)SQL Row Lock while user enters data c#

我将使用数据库创建一个应用程序,其中允许多个用户编辑有关实体的信息。

tldr:如何在用户使用C#编辑信息时锁定数据库中的行。

我已经对执行查询时锁定数据库中的记录进行了一些研究。 我主要看到的是锁定begin transactioncommit transaction 但是,这不符合我的需求,因为它需要被锁定的时间比查询执行的时间更长。

如果user1正在编辑记录(在c#中,使用表单应用程序,填写了一些文本框),那么我需要锁定该行,直到他完成编辑。 因为同时user2可能会尝试编辑相同的记录。 到user1完成时,一切都很好,但是当user2完成时,他以太覆盖或获取关于他正在搜索的记录(名称)的错误不再存在。

一个简单的解决方案是使用IsLocked添加一列,具体取决于用户可以编辑一行。 但是当由于某种原因应用程序崩溃或用户强制在任务管理器中停止该进程时,该行将永远被锁定。 (或者在发生这种情况时仍然有执行代码的方法吗?)

另一种方法是不执行commit transaction就执行查询。 为此,我相信您必须保持连接打开,否则它将终止。 在运行应用程序时,保持开放连接对我来说似乎不是一个好主意,不是吗?

旁注:标题说(my)sql,因为我不确定我将使用哪个。

谢谢你的时间!

我认为在用户以某种GUI形式编辑数据时锁定行不是最好的解决方案。 应用程序可能崩溃或用户可以长时间编辑行...这绝对不依赖于您将使用的SQL引擎(MS SQL,MySQL ...)

  • 记录应具有一些唯一的ID。 因此,像UPDATE table SET ..... WHERE entityID = someID这样的查询UPDATE table SET ..... WHERE entityID = someID将不依赖于先前的值(仅注意可能的行删除)

  • 您可以在编辑之前记住值(或一些时间戳,它是数据库记录的一部分),并在更新行之前对其进行检查,以便您知道有人更改了同一记录并可以通知用户。

关于“保持连接打开”-DBConnection实现IDisposable,请阅读文章如何使用它。 您不必知道再次打开连接-阅读有关SQL连接池的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM