尝试将 Transaction.Commit() 发送到数据库时超时;潜在的死锁



我有一个网页,其编码结构如下:

SqlConnection conX =new SqlConnection(blablabla);
conX.Open();
SqlTransaction tran=conX.BeginTransaction();

try{
   SqlCommand cmdInsert =new SqlCommand("INSERT INTO Table1(ColX,ColY) VALUES @x,@y",conX);
   cmdInsert.Transaction=tran;
   cmdInsert.ExecuteNonQuery();
   SqlCommand cmdSelect=new SqlCOmmand("SELECT * FROM Table1",conX);
   cmdSelect.Transaction=tran;
   SqlDataReader dtr=cmdSelect.ExecuteReader();
   //read stuff from dtr
   dtr.Close();
   cmdInsert=new SqlCommand("UPDATE Table2 set ColA=@a",conX);
   cmdInsert.Transaction=tran;
   cmdInsert.ExecuteNonQuery();
   //display MiscMessage
   tran.Commit();
   //display SuccessMessage
}
catch(Exception x)
{
   tran.Rollback();
   //display x.Message
}
finally
{
   conX.Close();
}

因此,一切似乎都有效,直到杂项消息。然后,过了一会儿(也许是15秒左右?)x.Message弹出,说:

"超时已过期。在操作完成之前经过的超时期限或服务器没有响应。

所以我的跨性别有问题。提交()?数据库没有更新,所以我假设是跨。回滚工作...

我读过死锁会导致超时...此问题是由我从表1中选择的SELECT语句引起的,该语句正由第一个INSERT语句使用?如果是这样,我该怎么办?如果这不是问题,那是什么?

因为您显示 MiscMessage,所以您的事务仍处于打开状态,然后超时过期。提交事务,然后显示消息。

相关内容

  • 没有找到相关文章

最新更新