我即将使用数据库创建一个应用程序,其中允许多个用户编辑有关实体的信息。
tldr:当用户在 C# 中编辑它的信息时,如何锁定数据库中的一行。
我对在执行查询时锁定数据库中的记录进行了一些研究。我主要看到的是用begin transaction
and锁定commit transaction
。但是,这不适合我的需要,因为它需要锁定比查询执行时间更长的时间。
如果 user1 正在编辑一条记录(在 c# 中,使用表单应用程序,填写一些文本框),那么我需要锁定该行,直到他完成编辑。因为同时 user2 可能会尝试编辑相同的记录。到 user1 完成时,一切都很好,但是当 user2 完成时,他会覆盖或返回有关他正在搜索的记录(名称)不再存在的错误。
一个简单的解决方案是添加一个带有 的列IsLocked
,这取决于用户可以编辑一行。但是当由于某种原因应用程序崩溃或用户强制停止任务管理器中的进程时,该行将被永远锁定。(或者在发生这种情况时还有办法执行代码吗?)
另一种方法是执行不带commit transaction
. 为此,我相信,您必须保持连接打开,否则它将终止。在运行应用程序时保持开放连接对我来说似乎不是一个好主意,或者是吗?
旁注:标题说(我的)sql,因为我不太确定我将使用哪一个。
谢谢你的时间!