C# - SQL 服务器 - 记录锁定
C# - SQL Server - record locking
我想征求建议,解决以下问题的推荐方法是什么,这样我就可以进行调查和阅读正确的信息。
用户可以从下拉列表中 select 一个项目,然后按编辑按钮更改 select 项目的数据。此时,我需要为其他用户锁定记录(首选方式是什么?)。如果另一个用户试图编辑相同的项目,则显示一条消息,表明它已被其他用户锁定。
处理应用程序/电脑崩溃以解锁记录(最佳解决方案?)
此致
彼得
当用户编辑行时,您应该使用乐观并发,而不是 server-side 锁定。在乐观并发下,客户端使用充当“并发标记”的附加列来过滤更新或删除,以确保该行未被任何其他用户更新。例如
update T set a = @a, b = @b
where Id = @id and RowVersionColumn = @rowversion;
select @@rowcount RowsAffected;
如果更新或删除影响零行,则客户端知道其他用户更改了该行,他们可以重新加载当前版本并决定是否re-submit 更改。
在 SQL 服务器中,一个 rowversion 列通常用作并发标记。
我想征求建议,解决以下问题的推荐方法是什么,这样我就可以进行调查和阅读正确的信息。 用户可以从下拉列表中 select 一个项目,然后按编辑按钮更改 select 项目的数据。此时,我需要为其他用户锁定记录(首选方式是什么?)。如果另一个用户试图编辑相同的项目,则显示一条消息,表明它已被其他用户锁定。 处理应用程序/电脑崩溃以解锁记录(最佳解决方案?)
此致
彼得
当用户编辑行时,您应该使用乐观并发,而不是 server-side 锁定。在乐观并发下,客户端使用充当“并发标记”的附加列来过滤更新或删除,以确保该行未被任何其他用户更新。例如
update T set a = @a, b = @b
where Id = @id and RowVersionColumn = @rowversion;
select @@rowcount RowsAffected;
如果更新或删除影响零行,则客户端知道其他用户更改了该行,他们可以重新加载当前版本并决定是否re-submit 更改。
在 SQL 服务器中,一个 rowversion 列通常用作并发标记。