使用SqlDataAdapter的时候,以填补一个DataTable的CommandTimeout不

2019-10-22 02:40发布

我设置的CommandTimeout为1秒,并预期不TimeoutException异常被抛出。 我运行的查询需要约7-8秒。 当我使用的ExecuteReader执行查询,而不是试图填补一个DataTable超时但是没有工作。 我曾尝试在创建命令后,也创造了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);
}

Answer 1:

像“查询select * from ”是一个坏主意。

什么是不使用SELECT *的原因是什么?

这就是说,也许你可以restric的数据量通过寻呼或类似的方式返回。 减少返回的数据量会使其工作



Answer 2:

原因是发生在SqlDataAdapter的,这是坦率地说,为什么他们是一个坏主意的魔力。

我的猜测是,他们使用的是异步进行填充,这将始终忽略命令超时。

我的建议:请从适配器离开,永不回头。 他们是不是有价值,让一切混乱。

如果这是不可能的,在连接字符串中设置您的连接超时而不管数据库的访问方式也应适用。



文章来源: CommandTimeout not working when using SqlDataAdapter to fill a DataTable