我将 CommandTimeout 设置为 1 秒,并且没有按预期抛出 TimeoutException。我正在运行的查询大约需要 7-8 秒。但是,当我使用 ExecuteReader 执行查询而不是尝试填充数据表时,超时确实有效。我尝试在创建命令后以及创建 DataAdapter 后设置 CommandTimeout。
using(SqlConnection con = new SqlConnection("data source=*****;user id==*****;password==*****;initial catalog==*****;"))
{
string query = "select * from *****";
SqlCommand command = new SqlCommand(query, con);
//command.CommandTimeout = 1;
CostingDataSet cds = new CostingDataSet();
SqlDataAdapter da = new SqlDataAdapter(command);
da.SelectCommand.CommandTimeout = 1;
Stopwatch stopwatch = Stopwatch.StartNew();
da.Fill(cds.CostingData);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
原因是 SQLDataAdapter 中发生的魔力,坦率地说,这就是为什么它们是一个坏主意。
我的猜测是他们正在使用异步来执行填充,这将始终忽略命令超时。
我的建议:远离适配器,永远不要回头。它们没有那么有价值,而且让一切变得更加混乱。
如果不可能,请在连接字符串中设置连接超时,无论如何访问数据库,它都应该适用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)