ストアドプロシージャを実行する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秒後にタイムアウトするようです。
接続のタイムアウトは、データベースにのみ接続するためのものです。
CommandTimeout
クラスの別のSqlCommand
プロパティがあり、このプロパティを使用して実行タイムアウトを指定します。
つまり。
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = connection1;
cmd.CommandTimeout = 240; //in seconds
//etc...
}
使用する SqlCommand.CommandTimeout
接続文字列で指定する代わりに、コマンドのプロパティ。
参考として [〜#〜] msdn [〜#〜] を参照してください。
コードで設定する必要があります。つまり、sqlコマンドオブジェクトのCommandTimeoutプロパティを設定します。
接続文字列のパラメーター 'connection timeout'は、接続の確立を試行している間、試行を終了してエラーを生成するまで待機する時間を表します。クエリの実行がタイムアウトするまでの時間ではありません。
おかげで、私も数週間前に同じ問題に直面し、webconfigとコマンドオブジェクトのタイムアウト値の間で混乱しました。クリアされたあなたの質問は今私の疑問を持っています:)
接続タイムアウトとは、実際にSQL Serverに接続している間に許容される時間を指します。コマンドのタイムアウトとは、コマンドの実行に許容される時間を指します。この場合は、ストアドプロシージャです。 SqlCommand.CommandTimeout
は、探しているプロパティです。