存储过程和SqlCommand超时

Sup*_*ell 6 c# sql sql-server timeout sqlcommand

如果我使用SqlCommand运行存储过程并且SqlCommand超时,StoredProc会继续执行还是在SqlCommand断开连接时强行退出?

bre*_*dan 3

我的直觉告诉我该程序仍会执行,因此我进行了一个简单的测试。

SQL:

Create Procedure TestDelay
AS

waitfor delay '00:00:40'

update table_1
set dt = getdate()
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

结果? 超时后该过程未完成。 我检查了 SQL 探查器中的跟踪期间发生的情况,并且确实 SQL 似乎将调用包装在事务中,并且必须在超时时回滚该事务。

注意:此测试是针对 SQL 2005 运行的,但我怀疑其他版本的结果类似。