Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在多用户环境中更新/删除行_C#_Sql Server_Winforms_Transactions_Dataset - Fatal编程技术网

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();
}