2012-11-22 25 views
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語句? 如果是這樣,我該怎麼辦?如果這不是問題,那是什麼?

回答

0

因爲您顯示MiscMessage,您的交易仍然打開,則超時過期。提交交易,然後顯示消息。

+0

哇,謝謝!這是問題!那還有一些.DataBind()是在.Commit()之前完成的! XD – user1843921

相關問題