查询命令超时= 0时的计时

时间:2015-09-08 19:25:57

标签: c# .net sql-server

我对查询有一个令人沮丧的问题,通常需要1.5-2分钟才能运行(由于缺乏修改此数据库的能力,我们无法比这次更多地改进它)。尽管Command Timeout属性设置为0(这是C#代码),查询超时。

以下是执行查询的代码:

public DataTable GetData()
{
    DataTable results = new DataTable();

    try
    {
        using (var sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["SqlConnectionString"].ToString()))
        {
            String command = _query;

            sqlConnection.Open();
            var sqlCommand = sqlConnection.CreateCommand();
            sqlCommand.CommandText = command;
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.CommandTimeout = 0;
            SqlDataAdapter daM = new SqlDataAdapter(sqlCommand.CommandText, sqlConnection);
            daM.Fill(results);
            sqlConnection.Close();
        }
    }
    catch(Exception e)
    {
        Console.WriteLine("Error " + e.StackTrace);
    }

    Console.WriteLine("Retrieving results for query " + _query);
    Console.WriteLine("Total Results: " + results.Rows.Count);
    return results;
}

我不知道在哪里寻找罪魁祸首。设置更明确的超时没有任何作用,正如我所说,没有办法进一步改进我们能够找到的查询。连接字符串具有以下参数:

server =

集成安全性= SSPI

database =

连接超时= 0

关于我接下来要去哪看的任何建议?我们正在使用Microsoft SQL Server。

2 个答案:

答案 0 :(得分:11)

您已设置sqlCommand.CommandTimeout,但稍后您已将SqlDataAdapter创建为

SqlDataAdapter daM = new SqlDataAdapter(sqlCommand.CommandText, sqlConnection)

此处适配器隐式创建并使用 new SqlCommand(不是您配置的那个),因为您已经传递了命令文本,而不是SqlCommand的实例。< / p>

使用SqlDataAdapter的另一个构造函数并将其创建为

 SqlDataAdapter daM = new SqlDataAdapter(sqlCommand)

答案 1 :(得分:1)

在SqlConnection上设置超时在您的情况下不起作用,您需要在SqlDataAdapter上执行此操作。

daM.SelectCommand.CommandTimeout = Value;

谷歌“如何更改SqlDataAdapter .CommandTimeout?”