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