c# - 阻止用户互相覆盖

标签 c# database overwrite

我想阻止两个用户在更新记录时不小心相互覆盖。也就是说,两个用户加载了一个页面,上面有记录 A。用户一将记录更新为 AB,用户二将其更新为 AC。

我不只是希望最后一次访问数据库来覆盖。我需要一种机制来表明记录已更新,因此您的记录无法保存。

现在我有两个想法是给记录加时间戳并进行检查。如果不匹配,则不允许更新。第二种方法是每次执行更新时对记录进行 GUID,检查 GUID,如果不匹配则不更新。

这两种方法是否有效,如果有效,哪种方法最好。如果没有,你有什么建议。如果它有所作为,这是在 C# 中

谢谢

最佳答案

您提到的这两种方法实际上是等效的 - 无论哪种方式,您都有效地获得了“结账时的记录”的唯一标识符。对于哪个更好,我没有任何特别的看法,尽管时间戳显然为您提供了有关记录何时有效的数据的额外好处。

另一种方法是记住以前的值是什么,并且只有在它们匹配时才允许更新 - 这样,如果用户 A 开始编辑记录,然后用户 B 进入并更改某些内容,然后再将其更改回来,用户 A 的编辑仍然有效。

这些技术的术语是乐观锁定(或 optimistic concurrency control)。

关于c# - 阻止用户互相覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2310091/

相关文章:

C# System.Array 如何计算或查找它有多少维度?

c# - 将 Y 或 N 转换为 bool C#

python - ZODB/ZEO 。从客户端连接到服务器

c# - 覆盖 zip 文件中的条目

Python for 循环覆盖

c# - 使用 StringComparison.Ordinal 对 String 进行排序的最简单方法

c# - DataGridView C# 搜索给出 null

php - 脚本在复制数据库表时卡住 - Mysql - PHP

mysql - 将分隔的逗号值插入到sql表中

C++ - 在覆盖期间调用析构函数时的类成员