Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#_.net_Sql Server_Transactions - Fatal编程技术网

C# 交易陷入僵局

C# 交易陷入僵局,c#,.net,sql-server,transactions,C#,.net,Sql Server,Transactions,我得到以下sql异常: 事务在另一个进程的锁资源上处于死锁状态,已被选为死锁牺牲品。重新运行事务。在批处理结束时检测到不可提交的事务。事务被回滚。 我在任何存储过程中都没有任何事务,我从.net进行事务处理,我总是使用。 你们以前见过这个吗?不管从哪里开始,交易都是交易。无论是在c#还是在RDBMS中 您的使用问题开始有效地进行转换 建议您在检测到死锁时自动重试,而不是在此处编写代码,Google上有许多结果供您阅读。使用事务时需要小心,因为默认情况下它会将隔离级别设置为可序列化。当连接被释放回

我得到以下sql异常: 事务在另一个进程的锁资源上处于死锁状态,已被选为死锁牺牲品。重新运行事务。在批处理结束时检测到不可提交的事务。事务被回滚。 我在任何存储过程中都没有任何事务,我从.net进行事务处理,我总是使用。
你们以前见过这个吗?

不管从哪里开始,交易都是交易。无论是在c#还是在RDBMS中

您的
使用问题开始有效地进行转换


建议您在检测到死锁时自动重试,而不是在此处编写代码,Google上有许多结果供您阅读。

使用事务时需要小心,因为默认情况下它会将隔离级别设置为可序列化。当连接被释放回池中时,它仍将设置该级别。这会严重损害并发性。

IMO MSDN在这方面完全错误。如果您只是不假思索地自动重试,您很可能会覆盖其他人的更改,即丢失的更改。@AlexKuznetsov:我发现死锁通常不会发生在同一行的同一个操作上,而是通过另一个进程发生在同一个表/页/索引上。如果对一行的写入路径最少,则使用相同代码/操作的两个并发进程不应死锁。然而,插入父对象到子对象,删除子对象到父对象可以很好地实现。在我的例子中,我还是会寻找其他的变化:例如,我不知道数据在屏幕上显示了多长时间以供编辑。我不同意你的观点“使用相同代码/操作的并发进程不应该死锁”-下面是一个复制,它显示了存储进程如何与相同的进程解除锁定形成另一个连接:想想看,如果我们是死锁受害者,可能有人修改了我们试图更新的相同数据。如果它被相同的代码修改,这真的很重要吗?