2011-02-05 3 views
1

私はデータベースquerysでタイムアウトを実装しようとしています...もし操作が長時間実行されていると、クエリをキャンセルしてasp.netページにタイムアウトメッセージを返す必要があります... 。asp.netのスレッド

HERESに私はタイムアウト部分のために使っていたコード....問題は、私は時々、クエリからの部分的な結果セットを取得していますが...

RunSearch search = new RunSearch(GetSearchResults); 
Thread searchThread = new Thread(delegate() { 
dsRes = search.Invoke(ProcessingID, 
objSqlConnection,SearchStartTime); }); 

searchThread.Start(); 
// searchThread.Join(ResultPollingPeriod * 1000); 

if (!searchThread.Join(ResultPollingPeriod * 1000)) 
{ 
    searchThread.Abort(); 
    dsRes = null; 
    return ReturnTimeoutMessage(); 
} 
else 
{ 
    return dsRes; 
} 

任意のヘルプははるかに高く評価されています...

答えて

1

あなたの目標に応じてこれを処理するにはいくつかの方法がありますが、oを書く必要はありませんこれを実装する。データベースでタイムアウトを設定して、コードでこれを処理する必要はありません。クライアント側で定義したい場合は、考慮するタイムアウトの2種類があります。接続タイムアウトとコマンドタイムアウトです。

接続タイムアウトは、サーバーに接続できない場合です。これは、接続文字列の設定でConnect Timeout=30を追加して設定します。 30秒以内に接続が確立されない場合、タイムアウトになります。

は、それが接続を確立しない場合は、SqlCommandオブジェクトのコマンドタイムアウト必要があります。

using (SqlCommand myCommand = new SqlCommand()) 
{ 
    myCommand.CommandTimeout = 30; 
    //the rest of your command setup here 
} 

それは私の理解がCommandTimeoutのは、接続タイムアウトと同時に実行されていることだが - それが29秒かかる場合接続するにはコマンドは1秒以内に実行して戻る必要があります。

これらのタイムアウトは例外をスローします。この例外は、あなたが望むようにキャッチして実行できます(ASP.NETページなどにタイムアウトメッセージを返します)。

関連する問題