C# 使用SqlDataAdapter填充数据表时CommandTimeout不工作

C# 使用SqlDataAdapter填充数据表时CommandTimeout不工作,c#,.net,datatable,timeout,sqldataadapter,C#,.net,Datatable,Timeout,Sqldataadapter,我正在将CommandTimeout设置为1秒,并且没有按预期引发TimeoutException。我正在运行的查询大约需要7-8秒。但是,当我使用ExecuteReader执行查询而不是尝试填充数据表时,超时确实有效。在创建命令和DataAdapter之后,我尝试设置CommandTimeout using(SqlConnection con = new SqlConnection("data source=*****;user id==*****;password==*****;initia

我正在将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);
}
像“
select*from
”这样的查询是个坏主意


也就是说,您可以通过分页或类似方式限制要返回的数据量。减少返回的数据量将使其工作

原因是SQLDataAdapter中出现的魔力,坦率地说,这就是为什么它们是一个坏主意

我猜他们正在使用async来执行填充,这将始终忽略命令超时

我的建议是:远离适配器,不要回头看。它们没那么值钱,让一切变得更混乱


如果不可能,请在连接字符串中设置连接超时,无论如何访问数据库,该超时都应适用。

引用的代码来自我创建的用于隔离问题的快速抽象VS项目。此外,减少数据将如何解决问题?我的问题是超时异常没有被抛出。@Ersl抱歉,我以为你说的异常已经被抛出。不幸的是,我现在无法离开SQLDataAdapter。但我将来会记住这一点。我尝试过使用ConnectionTimeout,但这对命令执行时间没有影响。我还有一个客户端遇到了5分钟的默认超时。因此,无论出于何种原因,默认超时似乎没有被覆盖。Connection.Open()?