1
我有一個網頁已經有所編碼結構如下:嘗試將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 [email protected]",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語句? 如果是這樣,我該怎麼辦?如果這不是問題,那是什麼?
哇,謝謝!這是問題!那還有一些.DataBind()是在.Commit()之前完成的! XD – user1843921