C# SqlDataAdapter.Fill花费的时间比CommandTimeout多
执行此查询时,虽然我将C# SqlDataAdapter.Fill花费的时间比CommandTimeout多,c#,sql,sql-server,ado.net,sqldataadapter,C#,Sql,Sql Server,Ado.net,Sqldataadapter,执行此查询时,虽然我将ConnectionTimeOut设置为1秒,SqlDataAdapter.Fill所需时间超过65秒。超时不起作用 var cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "select * FROM [tblLargeData]"; con.Open(); cmd.Connection = con; var ds = new DataSet(); var da
ConnectionTimeOut
设置为1秒,SqlDataAdapter.Fill
所需时间超过65秒。超时不起作用
var cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * FROM [tblLargeData]";
con.Open();
cmd.Connection = con;
var ds = new DataSet();
var da = new SqlDataAdapter(cmd);
da.SelectCommand.CommandTimeout = 1;
da.Fill(ds);
tblLargeData
是SQL server数据库中包含大量数据的表。
但是当我像这样更改查询时,CommandTimeOut
工作正常,超时发生
var cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * INTO #temp1 FROM [tblLargeData]; SELECT * FROM #temp1";
con.Open();
cmd.Connection = con;
var ds = new DataSet();
var da = new SqlDataAdapter(cmd);
da.SelectCommand.CommandTimeout = 1;
da.Fill(ds);
在CommandText
中,首先在临时表中插入结果,然后从中选择结果
为什么CommandTimeout在第一次查询中不起作用?根据您报告的行为,我的最佳猜测是,超时一直持续到SQL Server开始发回数据为止。您的第一个查询可能立即开始返回数据,发送数据的过程需要很长时间。第二个查询在SQL Server上花费大量时间处理数据,如果超时在完成之前发生,那么您的查询将正确取消。使用SqlDataAdapter的模式好吗?连接关闭了吗?