我有一些代码查询后端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在服务器端清理并正确杀死未完成的查询,还是应该从我这边做更多的事情?
答案 0 :(得分:2)
当您在服务器上运行任何代码时,客户端保持连接状态并等待来自服务器的重新分配。
超时 - 客户端在从客户端关闭连接之前等待服务器响应的最长时间。因此,服务器上的代码会一直运行,直到完成或失败(例如,tempDB溢出错误)。
因此,默认情况下,您不能指望事务在超时时终止。