我是新手C#
和SQL Server
。
我正在使用Winforms
.
我正在使用dataset
.
在主事务和明细事务中,假设我从数据库中检索一个事务。同时另一个用户也检索到相同的交易。
我的要求是当我更改此事务时,不应允许其他人更新或删除同一事务。
在模式dataset
中disconnect
,我怎样才能实现锁定机制?
我是新手C#
和SQL Server
。
我正在使用Winforms
.
我正在使用dataset
.
在主事务和明细事务中,假设我从数据库中检索一个事务。同时另一个用户也检索到相同的交易。
我的要求是当我更改此事务时,不应允许其他人更新或删除同一事务。
在模式dataset
中disconnect
,我怎样才能实现锁定机制?
如果我假设您使用 C# 是正确的,那么您应该研究一些 ORM 框架,因为它们可以为您处理这样的冲突,或者至少在它们发生时提醒您,以便您可以在代码中处理它们。因此,您可以例如通知用户其他人进行了更改并刷新他们的显示或合并更改并保存合并的数据。
看看实体框架。确实有大量的教程和示例可供您使用。这应该让你开始。
http://www.asp.net/entity-framework
http://msdn.microsoft.com/en-us/library/bb386876.aspx
这里特指数据并发(它的MVC但是原理是一样的)
using (var transaction = connection.BeginTransaction())
{
adapter.Update(dataSet);
transaction.Commit();
}
如果更新是针对表中的少量行,SQL Server 会向调用者授予行级锁。如果更改涉及大量行,SQL Server 将授予表级锁定。都是自动的。因此,并发性得到了照顾。
然而问题在于,由于许多用户同时在同一组行上工作,死锁的可能性很高。Udi Dahan 提出的新的CQRS 设计模式解决了这个问题。但是,如果您的应用程序很小,那么应用 CQRS 将是一种矫枉过正。