デフォルトの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();
}
}
特定のクエリにタイムアウトを設定する場合は、CommandTimeoutを使用します。
その使用法は次のとおりです。
command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.
接続文字列でタイムアウト値を設定できますが、接続後は読み取り専用になります。詳しくは http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx をご覧ください。
Anilが示唆するように、ConnectionTimeoutは必要なものではないかもしれません。新しい接続を確立するときにADOドライバーが待機する時間を制御します。あなたの使用法は、特定のSQLクエリを実行するために通常よりも長く待つ必要があることを示しているようです。その場合、Anilは正確です。 CommandTimeout(R/W)を使用して、個々のSqlCommandの予想完了時間を変更します。
接続文字列にいつでも追加できます。
connect timeout=180;
より簡単な方法は、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
を設定できます。インスタンスを作成するとき、この値を変更しないでください。
接続文字列にConnection Timeout=180;
を追加できます
古い投稿ですが、探していたものが出てきたので、このトピックに情報を追加すると思いました。コメントを追加するつもりでしたが、十分な担当者がいません。
他の人が言ったように:
connection.ConnectionTimeoutは初期接続に使用されます
command.CommandTimeoutは、個々の検索、更新などに使用されます。
しかし:
connection.ConnectionTimeoutは、トランザクションのコミットおよびロールバックに使用されるalsoです。
はい、これは絶対に非常識な設計上の決定です。
そのため、コミットまたはロールバックでタイムアウトが発生している場合は、接続文字列を介してこの値を増やす必要があります。
command.CommandTimeout
を使用する必要があります
SqlConnectionStringBuilderを使用することもできます
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
// code goes here
}
接続タイムアウトを接続レベルとコマンドレベルに設定できます。
接続文字列に「接続タイムアウト= 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;
}
}