簡體   English   中英

如何停止處理時間太長的查詢

[英]How to stop a query that is taking too long to process

我有一個小程序,可讓學生測試在ASP.Net中構建並使用SQL Server數據庫的SQL查詢。 問題是某些查詢“掛起”了控制台和SQL Server。 考慮到這一點,我想將執行時間限制為10s或引發異常。

現在,代碼看起來像這樣:

        SqlCommand cmd = new SqlCommand();

        cmd.CommandText = TextBox1.Text; //Their query
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 1;
        cmd.Connection = sqlConnection1;

        sqlConnection1.Open();
        try
        {
            GridView1.DataSource = cmd.ExecuteReader();
            GridView1.DataBind();
            int count = GridView1.Rows.Count;
            Label1.Text = count.ToString() + " Rows";
        }
        catch (Exception ex)
        {
            Label1.Text = ex.Message;
            GridView1.DataSource = null;
            GridView1.DataBind();
        }
        finally
        {
            sqlConnection1.Close();
        }

CommandtTimeout不能為我完成此操作,因為通常問題是查詢在不斷地流傳輸行(主要是由於笛卡爾積運算)。

有沒有一種方法可以停止查詢中間執行而不會遍歷每一行?

您可以使用線程檢查代碼超時

//Variables
string input;

//Code to run until time exceeds
Thread thread = new Thread(() => {
    input = Console.ReadLine();
});
thread.Start();

//Check if time exceeded
if (!thread.Join(TimeSpan.FromSeconds(10)))
{
    thread.Abort();
    throw new Exception("Time exceeded.");
}

而不是使用GridView1.DataSource = cmd.ExecuteReader(); GridView1.DataBind(); ,您將不得不編寫代碼來繼續讀取DataReader,直到您確定它花費的時間太長或已經讀取了太多的行。

暫無
暫無

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

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