web-dev-qa-db-ja.com

SqlCommandを使用してストアプロシージャを実行するときにタイムアウトエラーを防ぐにはどうすればよいですか?

ストアドプロシージャを実行するC#プログラムがあります。 Microsoft SQLサーバー管理スタジオからストアドプロシージャを実行すると、問題なく動作します。実行には約30秒かかります。ただし、C#プログラムから同じストアドプロシージャを実行しようとすると、接続文字列のタイムアウトを10分に設定していても、タイムアウトします。

using (connection1 = new SqlConnection("user id=user_id_goes_here;password=password_goes_here;initial catalog=database_name_goes_here;data source=server_name_goes_here;connection timeout=600))

(テスト目的で)10分を許可するように設定しましたが、約30秒後にタイムアウトするようです。

16
oshirowanen

接続のタイムアウトは、データベースにのみ接続するためのものです。

CommandTimeoutクラスの別のSqlCommandプロパティがあり、このプロパティを使用して実行タイムアウトを指定します。

つまり。

using (SqlCommand cmd = new SqlCommand())
{
  cmd.Connection = connection1;
  cmd.CommandTimeout = 240; //in seconds
  //etc...
}
23
Patrick Allwood

使用する SqlCommand.CommandTimeout接続文字列で指定する代わりに、コマンドのプロパティ。

参考として [〜#〜] msdn [〜#〜] を参照してください。

6
Andy Korneyev

コードで設定する必要があります。つまり、sqlコマンドオブジェクトのCommandTimeoutプロパティを設定します。

接続文字列のパラメーター 'connection timeout'は、接続の確立を試行している間、試行を終了してエラーを生成するまで待機する時間を表します。クエリの実行がタイムアウトするまでの時間ではありません。

おかげで、私も数週間前に同じ問題に直面し、webconfigとコマンドオブジェクトのタイムアウト値の間で混乱しました。クリアされたあなたの質問は今私の疑問を持っています:)

msdnからの参照リンク

2
Satyajit

接続タイムアウトとは、実際にSQL Serverに接続している間に許容される時間を指します。コマンドのタイムアウトとは、コマンドの実行に許容される時間を指します。この場合は、ストアドプロシージャです。 SqlCommand.CommandTimeoutは、探しているプロパティです。

1
krisdyson