C# 如何在多用户环境中更新/删除行
我不熟悉C# 如何在多用户环境中更新/删除行,c#,sql-server,winforms,transactions,dataset,C#,Sql Server,Winforms,Transactions,Dataset,我不熟悉C和sqlserver 我正在使用Winforms开发一个应用程序 我正在使用数据集 在master和details事务中,假设我从数据库中检索一个事务。 同时,另一个用户也检索相同的事务 我的要求是,当我更改此事务时,不允许任何其他人更新或删除同一事务 由于dataset处于disconnect模式,如何实现锁定机制?如果我正确地假设您使用的是C,那么您应该研究一些ORM框架,因为它们可以为您处理这样的冲突,或者至少在发生冲突时提醒您,以便您可以在代码中处理它们。例如,您可以通知用户其
C
和sqlserver
我正在使用Winforms
开发一个应用程序
我正在使用数据集
在master和details事务中,假设我从数据库中检索一个事务。
同时,另一个用户也检索相同的事务
我的要求是,当我更改此事务时,不允许任何其他人更新或删除同一事务
由于
dataset
处于disconnect
模式,如何实现锁定机制?如果我正确地假设您使用的是C,那么您应该研究一些ORM框架,因为它们可以为您处理这样的冲突,或者至少在发生冲突时提醒您,以便您可以在代码中处理它们。例如,您可以通知用户其他人进行了更改并刷新其显示,或者合并更改并保存合并的数据
看看实体框架。这里有大量的教程和示例可供您使用。这应该让你开始
这特别引用了数据并发(其MVC,但原理相同)
如果更新是针对表中的少量行,SQL server将向调用者授予行级锁。如果更改为大量行,SQL server将授予表级锁。这是全自动的。因此,并发性得到了处理
然而,问题是,由于许多用户同时处理同一组行,死锁的可能性很高。新的解决方案解决了这个问题。然而,如果您的应用程序很小,那么应用CQR将是一种过火的行为。我之前所做的是在“保存”按钮中,在保存之前调用我的方法“CheckTransactionNumber”。即使两个(或更多)用户的屏幕上有“相同”的交易编号,但一旦单击“保存”,它们也不会相同。到目前为止,没有发生任何错误。我知道这是一项工作,但它仍然对我有用
using (var transaction = connection.BeginTransaction())
{
adapter.Update(dataSet);
transaction.Commit();
}