2016-10-22 4 views
0

データベースが到達可能かどうかをチェックして、接続状態に従ってカスタムアクションを実行しようとしています。SqlServerの接続タイムアウトプロパティが正しく動作しない

string connectionString = "Data Source =" + textBox1.Text + ";Initial Catalog=master;Integrated Security=true;Connect Timeout=1"; 

     SqlConnection connection = new SqlConnection(connectionString); 
     try 
     { 
      connection.Open(); 
      //do some action 
      connection.Close(); 
     } 
     catch (SqlException) 
     { 
      connection.Close(); 
      //do some action 
     } 

を次のように私のコードは、私がテキストボックスを通じて、対象のマシン名を提供しています。上記のコードでは、接続が成功するたびにtryブロック内のコードが数秒で実行されます。ただし、接続を確立できない場合は、Connect Timeoutプロパティは無視され、30秒間待機してからcatchブロックに移動します。

私は次のリンクconnection timeout property in connection string ignoredを試してみましたが、成功しませんでした。 5,10,15,20秒のConnect Timeout値を試しましたが、何も動作していないようです。

私のアプローチで何か問題がある場合は、私を助けてください。

ありがとうございます!

答えて

1

正しい接続文字列キーワードConnection Timeout=1を指定する必要があります。

私の経験では、実際の時間は、例外が発生する前に、サーバーが完全な接続プールではなく到達不能であるためにSqlExceptionではなくInvalidOperationExceptionが発生するため、 。

try 
{ 
    using (var connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
    } 
} 
catch (SqlException ex) 
{ 
    //do some action 
} 
catch (InvalidOperationException ex) 
{ 
    //do some action 
} 

はインジェクションの脆弱性を回避するためにSqlConnectionStringBuilder classを使用して考えてみましょう:私は、テスト接続に確保するusingブロックがすぐに配置されている示唆しています。

関連する問題