簡體   English   中英

查詢命令超時= 0時的計時

[英]Query Timing out when Command Timeout = 0

我有一個令人沮喪的問題,查詢通常需要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。

你已經設置了sqlCommand.CommandTimeout ,但是后來你創建了SqlDataAdapter

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

這里,適配器隱式創建並使用新的 SqlCommand (不是你配置的那個),因為你已經傳遞了命令文本,而不是SqlCommand實例。

使用SqlDataAdapter另一個構造函數並創建它

 SqlDataAdapter daM = new SqlDataAdapter(sqlCommand)

在您的情況下,在SqlConnection上設置超時不起作用,您需要在SqlDataAdapter上執行此操作。

daM.SelectCommand.CommandTimeout = Value;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM