Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多用户编辑_C#_Asp.net_Vb.net_Ado.net_Concurrency - Fatal编程技术网

C# 多用户编辑

C# 多用户编辑,c#,asp.net,vb.net,ado.net,concurrency,C#,Asp.net,Vb.net,Ado.net,Concurrency,我有一个系统,如果用户试图编辑当前已编辑的记录,我会向用户显示警告。如果是这种情况,用户将无法保存记录,而只能查看它 我有一个想法,使用某种类型的类来监视已编辑记录的活动等,但这有点过头了我的另一个担忧是,如果浏览器崩溃或关闭了他们的计算机,这将如何影响页面的状态。 另一个想法是使用上次更新的时间戳,但这看起来也是不可能的,因为记录更新的方式 有没有人对我如何实现这样的东西有什么想法或资源。不需要代码 根据评论,我添加了这些额外的细节。 数据库是SQL server 2008 asp.NET3.

我有一个系统,如果用户试图编辑当前已编辑的记录,我会向用户显示警告。如果是这种情况,用户将无法保存记录,而只能查看它

我有一个想法,使用某种类型的类来监视已编辑记录的活动等,但这有点过头了我的另一个担忧是,如果浏览器崩溃或关闭了他们的计算机,这将如何影响页面的状态。

另一个想法是使用上次更新的时间戳,但这看起来也是不可能的,因为记录更新的方式

有没有人对我如何实现这样的东西有什么想法或资源。不需要代码

根据评论,我添加了这些额外的细节。 数据库是SQL server 2008 asp.NET3.5 一条记录可以是数据库的许多部分,例如,booking表session表和interrupter表中的一行

用户将查看需要预订的会话列表,选择预订并填写预订表进行预订。“想要停止”是指其他人在同一时间或在其他人进行预订时尝试进行相同的预订。

请查看MSDN了解更多信息

悲观并发涉及将数据源中的行锁定到 防止其他用户修改数据时影响 当前用户。在悲观模型中,当用户执行操作时 这会导致应用锁,其他用户无法执行操作 这将与锁冲突,直到锁所有者释放它。 此模型主要用于存在重负载的环境中 争用数据,因此使用锁保护数据的成本很低 低于在并发情况下回滚事务的成本 冲突时有发生

相比之下,使用乐观并发的用户不会锁定行 读的时候。当用户想要更新行时,应用程序 必须确定自该行创建以来,其他用户是否已更改该行 阅读乐观并发通常用于具有 数据争用率低。乐观并发提高了性能 因为不需要锁定记录,而需要锁定记录 需要额外的服务器资源。还有,为了保持 记录锁定,则需要与数据库服务器的持久连接 必修的。因为在乐观并发中不是这样 在这种模式下,与服务器的连接可以免费为更多的用户提供服务 客户在更少的时间

在乐观并发模型中,冲突被认为具有 如果用户从数据库接收到值后,另一个 用户在第一个用户尝试修改之前修改该值 它

测试乐观并发冲突 有几种测试乐观并发性的技术 违反其中之一涉及在表中包含一个timestamp列。 数据库通常提供时间戳功能,可用于 确定记录上次更新的日期和时间。使用 在这种技术中,时间戳列包含在表中 定义。无论何时更新记录,时间戳都会更新 以反映当前日期和时间。在一次乐观的测试中 并发冲突时,时间戳列返回任何 查询表的内容。当尝试更新时,将 将数据库中的时间戳值与原始时间戳进行比较 值包含在修改的行中。如果它们匹配,则更新无效 执行,时间戳列将用当前时间更新 反映更新。如果它们不匹配,则表示乐观并发 违规行为已经发生

另一种测试乐观并发冲突的技术 验证行中的所有原始列值是否仍然匹配 在数据库中找到的


本质上,我在SQL数据库中维护一个
Edit
(查找)表,包括4个字段
UserID、Action、EntityID和Datestamp
,并将其链接到每个相关页面和可编辑项

因此,例如,如果用户在edit Foo网页上并单击
edit
链接,程序将执行
edit
表的查找,并且如果没有其他人在编辑记录,则执行插入,即:
4,'edit Foo',123,GETUTCDATE()
,其中123是正在编辑的
Foo
的ID

该过程还有许多其他功能,例如,如果用户处于编辑模式一段时间,记录将自动从表中删除,并且该项将再次变为可编辑


但是,该解决方案在高使用环境中非常适合我们。我希望你能理解。

我建议用
ASP.NET
替换
.NET
-标记(或C/VB.NET中的一个标记)。请查看MSDN。您使用的体系结构和技术是什么?APS.NET+DB?WPF+DB?没有DB?请解释清楚。究竟什么是“记录”?谢谢你的链接将有一个阅读