簡體   English   中英

存儲過程和SqlCommand超時

[英]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 (其他問題SO1SO2 )的原因

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM