[英]Stored Proc and SqlCommand Timeout
如果我使用SqlCommand運行存儲過程並且SqlCommand超時,StoredProc會繼續執行還是在SqlCommand斷開連接時強行退出?
我的直覺說程序仍然會執行,所以我把一個簡單的測試組合在一起。
SQL:
Create Procedure TestDelay
AS
waitfor delay '00:00:40'
update table_1
set dt = getdate()
在VB.Net中(為此目的與C#相同):
Dim con As New SqlConnection(myconnectionstring)
Dim com As New SqlCommand("TestDelay", con)
com.CommandType = CommandType.StoredProcedure
con.Open()
Try
com.ExecuteNonQuery()
Catch ex As Exception
con.Close()
Response.Write(ex.Message)
End Try
結果? 超時后,該過程未完成。 我檢查了在SQL事件探查器中跟蹤期間發生了什么,並確定SQL似乎在事務中包裝調用,並且必須在超時時回滾該事務。
注意:此測試是針對SQL 2005運行的,但我懷疑其他版本的結果是相似的。
正如brendan所說,客戶發送“中止”並且處理停止。 就如此容易。
然而,它比那更復雜......
默認情況下不會回滾任何事務,並且只有在關閉連接之后才會保留鎖定。 如果返回到連接池和重復使用,那么這不能算作封閉。
這就是推薦使用SET XACT_ABORT ON
(其他問題SO1 , SO2 )的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.