繁体   English   中英

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

[英]Timeout when trying to Transaction.Commit() to database; potential deadlock?

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

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

因此,直到MiscMessage,一切似乎都可以正常工作。 然后,过了一会儿(可能是15秒钟)?x.Message弹出,说:

“超时到期。在操作完成之前超时时间已过,或者服务器没有响应。”

我的trans.Commit()有什么问题吗? 数据库未更新,所以我认为trans.Rollback可以正常工作...

我已经读过死锁会导致超时...这是我的SELECT语句从Table1中选择的原因吗,该语句由第一个INSERT语句使用? 如果是这样,我该怎么办? 如果那不是问题,那是什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM