2

我有一些查询后端 SQL Server 的代码:

using (SqlConnection con = new SqlConnection(connString))
{
    SqlDataReader dr;
    SqlCommand cmd;
    cmd = new SqlCommand("PROC1", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = 300;

    try 
    {
       con.Open();
       dr = cmd.ExecuteReader();

       while(dr.Read()) 
       {
          // ...
       }
    }
    catch (SqlException e) 
    {
       // Some logging
    }
    catch (Exception e)
    {
       // Some logging
    }
}

一旦发生超时,我希望连接将被关闭并且未完成的查询将被终止。我面临一个tempdb大小一直不变或增加的问题。因为有许多其他进程访问同一台服务器,所以我想确保我不会从我的角度造成这种情况。

当查询超时发生时,我是否可以期望 SQL Server 清理并正确终止服务器端的未完成查询,还是我应该从我这边做更多的事情?

4

1 回答 1

3

当您在服务器上运行任何代码时,客户端会保持连接并等待来自服务器的响应。

超时 - 客户端在关闭客户端连接之前等待服务器响应的最长时间。所以服务器上的代码会一直运行,直到它完成或失败(例如 tempDB 溢出错误)。

因此,您不能期望事务默认在超时时终止。

于 2013-05-29T11:57:27.550 回答