【发布时间】:2018-12-23 18:44:52
【问题描述】:
我在windows应用程序中工作c#多线程功能(5线程)超过2M的数据,同时用我的内部代码删除突然发生死锁错误帮助如何纠正和解决问题 错误:事务(进程 ID 59)在锁定资源上与另一个进程死锁,并已被选为死锁牺牲品。重新运行事务
我参考了网站并找到了一个查询来解决这个问题在这里我提到了那个查询但有时它在某些时候它不起作用 SQL: ALTER DATABASE DBName SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE 去
帮助如何解决这个问题,无论是在代码还是 sql 管理中我应该改变什么
代码
if (SqlCon.State == ConnectionState.Closed)
{
OpenConnection();
}
string sqlStmt = "Delete em from Order em inner join OrderHeader ch on ch.CartonId=em.CartonId and ch.OrderNumber = " + "'" + OrderNumber + "'";
SqlCmd.CommandText = sqlStmt;
SqlCommand.CommandTimeout = TimeoutPeriod();
SqlTransaction transaction;
// Start a local transaction.
transaction = SqlCon.BeginTransaction(IsolationLevel.ReadCommitted);
// Must assign both transaction object and connection
// to Command object for a pending local transaction
SqlCommand.Connection = SqlCon;
SqlCommand.Transaction = transaction;
try
{
int val = SqlCommand.ExecuteNonQuery();
// Attempt to commit the transaction.
transaction.Commit();
return true;
}
catch (Exception ex)
{
throw ex;
}
finally
{
CloseConnection(SqlCon);
}
【问题讨论】:
-
您知道什么是死锁以及为什么会发生死锁吗?解决问题的方法有很多,但都是定制的
-
你可以参考这篇文章:- DeadLock
-
@BossRoss 线程同时处理所有线程都请求特定表然后发生死锁对吗?
-
这是一个很难解决的问题,你需要先弄清楚事务锁定了哪些查询,然后才能弄清楚你能做些什么
-
@TheGeneral 删除基于订单号的订单,带where条件的简单删除查询!
标签: c# sql sql-server deadlock database-deadlocks