SqlCommandオブジェクト-それを設定して忘れますか?
-
10-07-2019 - |
質問
SqlClient.SqlCommandオブジェクトを使用して、データベースでいくつかのストアドプロシージャを実行しています。通常、Query Analyzerを使用してこれらを手動で実行すると、完了するまでに最大15分かかります。
したがって、明らかにSqlCommandオブジェクトを使用してそれらを実行すると、SqlCommandタイムアウトが発生します。
タイムアウトプロパティを非常に高い値に設定できることは知っていますが、代わりにプロシージャをキックオフして切断する方法があるかどうか疑問に思っています。戻り値は必要ありません。
提案はありますか?ここで各spの処理時間を最適化することに興味はありません。「設定して忘れる」オプションがあるかどうかを判断するだけです。
SqlCommandオブジェクトの内容は次のとおりです。
using (SqlCommand cmd = new SqlCommand(@"update tbl_SYS_DATE set RPT_DATE = @inputDate
exec sp_Get_Bp_Data1
exec sp_Get_Bp_Data2
exec sp_Get_Bp_Data3
exec sp_channel_data1
exec sp_channel_data2
exec sp_channel_data3
", con))
解決
BeginExecuteNonQueryなどの非同期メソッドを使用できます。そのタイムアウトは無視されます。
他のヒント
非同期メソッド呼び出しBeginExecuteNonQueryを使用します。 MSDNページ からp>
BeginExecuteReaderなどの非同期メソッド呼び出し中は、CommandTimeoutプロパティは無視されます。
そのコードはバックグラウンドスレッドから実行できます。 BackgroundWorker オブジェクトを調べることができます。
所属していません StackOverflow