web-dev-qa-db-ja.com

SqlConnectionタイムアウトの変更

デフォルトのSqlConnectionタイムアウトの15秒をオーバーライドしようとしていますが、

プロパティまたはインデクサーは読み取り専用であるため割り当てることができません。

これを回避する方法はありますか?

using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
   connection.Open();

   using (SqlCommand command = connection.CreateCommand())
   {
       command.CommandType = CommandType.StoredProcedure;
       connection.ConnectionTimeout = 180; // This is not working 
       command.CommandText = "sproc_StoreData";
       command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
       command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);

       command.ExecuteNonQuery();
    }
}
69
Haymak3r

特定のクエリにタイムアウトを設定する場合は、CommandTimeoutを使用します。

その使用法は次のとおりです。

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.
136
Anil Mathew

接続文字列でタイムアウト値を設定できますが、接続後は読み取り専用になります。詳しくは http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx をご覧ください。

Anilが示唆するように、ConnectionTimeoutは必要なものではないかもしれません。新しい接続を確立するときにADOドライバーが待機する時間を制御します。あなたの使用法は、特定のSQLクエリを実行するために通常よりも長く待つ必要があることを示しているようです。その場合、Anilは正確です。 CommandTimeout(R/W)を使用して、個々のSqlCommandの予想完了時間を変更します。

37
KeithS

接続文字列にいつでも追加できます。

connect timeout=180;
16
Justin Niessner

より簡単な方法は、Web.Confing(WepApplication)App.Config(StandAloneApplication)など、xmlファイルにconnectionStringを設定することです。

 <connectionStrings>
    <remove name="myConn"/>
    <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/>
  </connectionStrings>

コードにより、この方法で接続を取得できます。

public static SqlConnection getConnection()
{
        string conn = string.Empty;
        conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
        SqlConnection aConnection = new SqlConnection(conn);
        return aConnection;
}

インスタンスを作成する場合のみ、ConnectionTimeoutを設定できます。インスタンスを作成するとき、この値を変更しないでください。

15
daniele3004

接続文字列にConnection Timeout=180;を追加できます

7
Horev Ivan

古い投稿ですが、探していたものが出てきたので、このトピックに情報を追加すると思いました。コメントを追加するつもりでしたが、十分な担当者がいません。

他の人が言ったように:

connection.ConnectionTimeoutは初期接続に使用されます

command.CommandTimeoutは、個々の検索、更新などに使用されます。

しかし:

connection.ConnectionTimeoutは、トランザクションのコミットおよびロールバックに使用されるalsoです。

はい、これは絶対に非常識な設計上の決定です。

そのため、コミットまたはロールバックでタイムアウトが発生している場合は、接続文字列を介してこの値を増やす必要があります。

6
Nick Thompson

command.CommandTimeoutを使用する必要があります

2
LewisT

SqlConnectionStringBuilderを使用することもできます

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
    // code goes here
}
1
Kelvin

接続タイムアウトを接続レベルとコマンドレベルに設定できます。

接続文字列に「接続タイムアウト= 10」を追加します。現在、接続タイムアウトは10秒です。

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10";
using (var con = new SqlConnection(connectionString))
{

}

CommandTimeoutプロパティをSqlCommandに設定します

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword";
using (var con = new SqlConnection(connectionString))
{

    using (var cmd =new SqlCommand())
    {
        cmd.CommandTimeout = 10;
    }

}
0
Jakir Hossain