如何在多用户环境中更新/删除行

时间:2013-08-13 16:31:39

标签: c# sql-server winforms transactions dataset

我是C#SQL Server的新手。

我正在使用Winforms开发一个应用程序。

我正在使用dataset

在主事务和详细信息事务中,假设我从数据库中检索一个事务。 同时,另一个用户也检索相同的事务。

我的要求是,当我更改此交易时,不应允许其他任何人更新或删除同一交易。

dataset处于disconnect模式时,如何实现锁定机制?

2 个答案:

答案 0 :(得分:1)

如果我正确地假设您使用的是C#,那么您应该查看一些ORM框架,因为它们可以为您处理这样的冲突,或者至少在它们发生时提醒您,以便您可以在代码中处理它们。因此,您可以通知用户其他人已做出更改并刷新其显示或合并更改并保存合并的数据。

看一下实体框架。有很多教程和示例可供您使用。这应该可以帮到你。

http://www.asp.net/entity-framework

http://msdn.microsoft.com/en-us/library/bb386876.aspx

这特别引用了数据并发性(它的MVC,但原理是相同的)

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

答案 1 :(得分:1)

using (var transaction = connection.BeginTransaction())
{

  adapter.Update(dataSet); 

  transaction.Commit();
}

如果更新是针对表中的少量行,则SQL Server会向调用者授予行级锁定。如果更改为大量行,则SQL Server会授予表级锁定。它全部是自动的。因此,并发性得到了解决。

然而问题是,当许多用户同时处理同一组行时,死锁的可能性很高。新的CQRS design pattern promoted by Udi Dahan会解决这个问题。但是,如果您的申请规模很小,那么应用CQRS将是一种过度杀伤。