我正在写一个Web应用程序,允许用户对数据库的基本CRUD操作。正在更新的表格少于200条记录,并且可能有多个用户使用此应用程序,因此需要某种锁定机制来避免2个用户互相覆盖其他更改。信号量为数据行
我已经看着信号量,但似乎只限制执行相同代码的用户数量。在我的数据层中,我为每个表都有一个类文件,所以我可以在特定表的类文件中使用它,但是我可以以某种方式将锁定限制在关键字段中?
我正在写一个Web应用程序,允许用户对数据库的基本CRUD操作。正在更新的表格少于200条记录,并且可能有多个用户使用此应用程序,因此需要某种锁定机制来避免2个用户互相覆盖其他更改。信号量为数据行
我已经看着信号量,但似乎只限制执行相同代码的用户数量。在我的数据层中,我为每个表都有一个类文件,所以我可以在特定表的类文件中使用它,但是我可以以某种方式将锁定限制在关键字段中?
假设您正在使用适当的SQL实现以及ASP .Net,为什么不使用事务来实现这一点? Check it out here.
此外,您还可以在optimistic concurrency上阅读,看看您是否需要这些。基本上,在保存一个值之前,用户检查特定字段中的值是否与第一次读取时的值相同。如果值相同,则假定没有其他人覆盖它,并且新值被保存到DB;如果值不相同,则会返回警告消息。
如果有帮助,我正在使用ODBC连接到DB2数据库。 – zkent 2012-02-20 15:43:21
乐观的并发性(以前没有听说过这个词)是我倾向于的方法。现在我从数据库中获取数据并将其放入DTO中,并将其存储在会话变量中,以在提交更改之前再次与数据库进行比较。 – zkent 2012-02-20 15:45:12
如果您使用配置向导使用TableAdapter,则可以通过最小的麻烦来实现乐观并发。 [http://msdn.microsoft.com/en-us/library/bb404102.aspx](搜索“创建支持乐观并发性的数据访问层”)。事实上,这是一个内置的财产。但是,它首先带有使用适配器的缺点,即数据库模式/ SP中的更改不会自动反映在适配器中。但是,如果您已经有一套存储过程正在其他地方使用,我认为这是您最好的选择:) – Rahul 2012-02-21 09:02:31
数据库不支持锁定吗?为什么在代码中? – Umbrella 2012-02-20 03:43:43
我确定它确实如此,除非我忘记了某些东西,不会停止用户1和2将相同记录加载到网页(选择查询),每次编辑和提交更改(更新查询),每个人都认为他们的更改是最新的。 – zkent 2012-02-21 03:49:02