回答:
はい、接続文字列に追加;Connection Timeout=30
して、必要な値を指定できます。
Connection Timeout
プロパティに設定されているタイムアウト値は、秒単位で表される時間です。このプロパティが設定されていない場合、接続のタイムアウト値はデフォルト値(15秒)です。
さらに、タイムアウト値をに設定して、0
接続の試行が無限の時間待機することを指定しています。ドキュメントで説明されているように、これは接続文字列に設定すべきではありません。
値0は制限がないことを示し、接続の試行は無期限に待機するため、ConnectionStringでは回避する必要があります。
うーん...
Darinが言ったように、より高い接続タイムアウト値を指定することができますが、それが本当に問題であるとは思えません。
接続タイムアウトが発生した場合、通常は次のいずれかの問題です。
ネットワーク構成-Webサーバー/開発ボックスとSQLサーバー間の接続が遅い。タイムアウトを増やすとこれが修正される場合がありますが、根本的な問題を調査するのが賢明でしょう。
接続文字列。何らかの理由で、誤ったユーザー名/パスワードが「アクセスが拒否されました」という実際のエラーではなく、タイムアウトエラーを表示する問題を確認しました。これは起こらないはずですが、それは人生です。
接続文字列2:サーバーの名前を誤って、または不完全に(たとえばのmysqlserver
代わりにmysqlserver.webdomain.com
)指定すると、タイムアウトが発生します。コマンドラインからの接続文字列で指定されたとおりのサーバー名を使用してサーバーにpingできますか?
接続文字列3:サーバー名がDNS(またはhostsファイル)にあるが、正しくない、またはアクセスできないIPを指している場合、machine-not-found-ishエラーではなくタイムアウトが発生します。
呼び出しているクエリがタイムアウトしています。サーバーへの接続に問題があるように見えますが、アプリの構造によっては、タイムアウトが発生する前にクエリが実行されている段階まで到達している可能性があります。
接続リーク。いくつのプロセスが実行されていますか?オープン接続はいくつありますか?生のADO.NETが接続プールを実行するのか、Enterprise Libraryが必要なときに自動的に接続を閉じるのか、それがすべて構成されているのかはわかりません。これはおそらく赤いニシンです。ただし、WCFとWebサービスを操作する場合、閉じられていない接続でタイムアウトやその他の予測できない動作が発生するという問題がありました。
試すこと:
SQL Management Studioでサーバーに接続するときにタイムアウトが発生しますか?その場合は、ネットワーク構成に問題がある可能性があります。Management Studioとの接続時に問題が発生しない場合、問題はサーバーではなくアプリにあります。
SQLプロファイラーを実行し、実際にネットワーク全体で何が行われているのかを確認します。実際に接続しているかどうか、またはクエリに問題があるかどうかがわかるはずです。
Management Studioでクエリを実行し、所要時間を確認します。
幸運を!
動的に変更したい場合は、SqlConnectionStringBuilderを使用することをお勧めします 。
ConnectionString、つまり文字列をクラスObjectに変換できます。すべての接続文字列プロパティがそのメンバーになります。
この場合の本当の利点は、ConnectionTimeout文字列部分が接続文字列に既に存在するかどうかを心配する必要がないことです。
また、オブジェクトを作成するため、文字列を操作するのではなく、オブジェクトに値を割り当てることが常に適切です。
次にコードサンプルを示します。
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
プロパティをSqlConnection
読み取り専用にするのは良い考えだとは思えません。