Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Sql server 2005 事务范围和存储过程中的死锁_Sql Server 2005_C# 4.0_Transactionscope - Fatal编程技术网

Sql server 2005 事务范围和存储过程中的死锁

Sql server 2005 事务范围和存储过程中的死锁,sql-server-2005,c#-4.0,transactionscope,Sql Server 2005,C# 4.0,Transactionscope,我有一个存储过程,基本上是这样的: begin transaction SELECT UPDATE INSERT commit transaction 此存储过程在应用程序中的两个不同线程的循环内调用,这两个线程都位于带有默认选项的事务范围内 有时,我的应用程序会死锁: “事务(进程ID 184)在另一个进程的锁资源上被死锁,并被选为死锁受害者。请重新运行该事务。” 我能做些什么吗?我应该使用不同的隔离级别吗?TransactionScope使用的默认隔离级别是可序列化

我有一个
存储过程
,基本上是这样的:

begin transaction
    SELECT
    UPDATE
    INSERT
commit transaction
存储过程
在应用程序中的两个不同线程的循环内调用,这两个线程都位于带有默认选项的
事务范围内

有时,我的应用程序会死锁:

“事务(进程ID 184)在另一个进程的锁资源上被死锁,并被选为死锁受害者。请重新运行该事务。”


我能做些什么吗?我应该使用不同的隔离级别吗?

TransactionScope使用的默认隔离级别是可序列化的,这通常是不必要的。使用需要指定其他级别的

基于博客文章的示例(描述此问题的一篇很棒的博客文章)


谢谢。这能解决僵局吗?我很难理解死锁从何而来。@Johan:使用serializable可能会导致死锁。请看这里:
TransactionOptions tOptions= new TransactionOptions();
tOptions.IsolationLevel = IsolationLevel.ReadCommitted;
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, tOptions))
{
  // do stuff here
}