我有一个系统,如果尝试编辑当前正在编辑的记录,我希望向用户显示警告。如果是这样的话,用户将无法保存记录,而只能查看记录。
我有一个想法,使用某种类来监控活动的记录,被编辑等,但这个缝有点过火。我的另一个担心是,如果浏览器崩溃或关闭他们的计算机,这将如何影响页面的状态。。
另一个想法是使用上一次更新的时间戳,但这看起来也不是,因为记录被更新的方式。
有没有人对我如何实现这样的事情有任何想法或资源。没有密码是必要的。
根据评论,我添加了这些额外的细节。数据库是server 2008 asp.net 3.5,一个记录可以是数据库的许多部分,例如预订表、会话表和中断表中的一行。
用户将查看需要预订的会话列表,选择预订并填写预订表单以进行预订。想要停止是其他人试图在同一时间做同样的预订,或当其他人正在做预订。
发布于 2011-07-21 08:52:27
特别是,我在SQL数据库中维护了一个Edit (查找)表,该表包含4个字段UserID, Action, EntityID and Datestamp,并将该字段链接到每个关联页面和可编辑项。
因此,例如,如果用户在编辑Foo网页上并单击edit链接,程序将执行对Edit表的查找,如果没有其他人编辑记录,则执行插入,即:4, 'Edit Foo', 123, GETUTCDATE(),其中123是正在编辑的Foo的ID。
该进程还有许多其他函数,例如,如果用户处于编辑模式下一段时间,记录就会自动从表中删除,并且该项再次变为可编辑的。
然而,在高使用环境中,该解决方案非常适合我们。我希望你明白这个想法。
发布于 2011-07-21 08:52:08
查看一下用于ADO.NET中的乐观/悲观并发的MSDN。
悲观并发涉及锁定数据源上的行,以防止其他用户以影响当前用户的方式修改数据。在悲观模型中,当用户执行导致应用锁的操作时,其他用户在锁所有者释放锁之前不能执行与锁冲突的操作。该模型主要用于数据竞争激烈的环境中,因此,如果发生并发冲突,用锁保护数据的成本低于回滚事务的成本。 相反,使用乐观并发的用户在读取行时不会锁定它。当用户想要更新一行时,应用程序必须确定自读取该行以来,其他用户是否已更改了该行。乐观并发通常用于低争用数据的环境中。乐观并发提高了性能,因为不需要锁定记录,而锁定记录需要额外的服务器资源。此外,为了维护记录锁,需要与数据库服务器建立持久连接。因为在乐观并发模型中不是这样,所以连接到服务器可以在更短的时间内为更多的客户端服务。 在乐观并发模型中,如果用户收到来自数据库的值后,另一个用户在第一个用户试图修改该值之前修改该值,则认为发生了冲突。 乐观并发违规的测试有几种测试乐观并发违规的技术。一种是在表中包括一个时间戳列。数据库通常提供时间戳功能,可用于标识最后更新记录的日期和时间。使用此技术,表定义中包含一个时间戳列。无论何时更新记录,时间戳都会被更新以反映当前日期和时间。在对乐观并发性违规的测试中,返回时间戳列,并对表的内容进行任何查询。尝试更新时,会将数据库中的时间戳值与修改行中包含的原始时间戳值进行比较。如果它们匹配,则执行更新,并用当前时间更新时间戳列以反映更新。如果它们不匹配,则会发生乐观的并发冲突。 另一种测试乐观并发冲突的技术是验证一行中的所有原始列值仍然与数据库中的值匹配……
https://stackoverflow.com/questions/6773366
复制相似问题