2010-07-30 64 views

回答

0

如果你還沒有關閉你的SQL連接,它應該繼續運行,如果它已經開始執行。 (你應該可以測試&對此比較容易驗證。)

5

答案是否定的,你在服務器上的嘗試操作將在30秒後失敗,你的SqlCommand對象會在你的代碼中拋出一個異常(下面)存儲過程事務將回滾。

超時已過期。操作完成之前超時的時間或服務器沒有響應。

...至少這是我可以驗證使用SQL Server我想知道完全相同的行爲......

+0

這裏特殊的是「隱式交易」。所有sql命令(至少每一個都是IMPLICIT事務的AUTOAMTICALLY部分),即使沒有顯式設置事務。 – TomTom 2010-08-01 21:58:44

+0

這個異常是一個明確的事務,除非SET XACT_ABORT ON被設置 - 直到連接本身關閉,否則這個事務根本不會回滾並保持打開/未提交狀態。在連接池中,這可能永遠不會發生(下一個命令可能會在事務的上下文中運行?不確定但是存在風險) – urbanhusky 2015-06-26 09:48:30

1

。我找不到答案,但做了一些試驗,看起來好像發送了某種取消查詢:

  • 如果涉及觸發器或表被鎖定,它將不會更新。
  • 如果有多個語句,而不是在事務中,它將在發生超時之後取消這些語句。已經完成的工作仍在繼續。
  • 如果您在插入之前添加延遲,則表中沒有內容。
  • 如果您在插入後添加了延遲,則會將插入內容寫入您的表格。

我知道這是一個五歲的崗位,但如果我來到這裏,其他人也:-)

順便說一句,在ado.net,以增加你的超時時間,你必須在sqlcommand和sqlconnection中增加,第一個的默認值是15秒,第二個30秒。所以如果你只是將sqlcommand改爲60秒,它將在30秒後仍然超時,這可能會令人費解。