[c#] 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();
    }
}



답변

특정 쿼리에 대한 시간 제한을 제공하려면 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의 예상 완료 시간을 변경합니다.


답변

더 깨끗한 방법은 xml 파일에서 connectionString을 설정하는 것입니다 (예 : Web.Confing(WepApplication)또는 App.Config(StandAloneApplication).

 <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인스턴스 생성 만 설정할 수 있습니다 . 인스턴스가 생성 될 때이 값을 변경하지 않습니다.


답변

언제든지 연결 문자열에 추가 할 수 있습니다.

connect timeout=180;


답변

Connection Timeout=180;연결 문자열에 추가 할 수 있습니다.


답변

SqlConnectionStringBuilder를 사용할 수도 있습니다.

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


답변

이전 게시물이지만 내가 검색 한 내용이 나오면이 주제에 정보를 추가 할 것이라고 생각했습니다. 코멘트를 추가하려고했는데 담당자가 부족합니다.

다른 사람들이 말했듯이 :

connection.ConnectionTimeout은 초기 연결에 사용됩니다.

command.CommandTimeout은 개별 검색, 업데이트 등에 사용됩니다.

그러나:

connection.ConnectionTimeout 트랜잭션 커밋 및 롤백 사용됩니다.

예, 이것은 절대적으로 미친 디자인 결정입니다.

따라서 커밋 또는 롤백시 시간 초과가 발생하는 경우 연결 문자열을 통해이 값을 늘려야합니다.