programing tip

SqlConnection 시간 제한 변경

itbloger 2020. 10. 28. 07:49
반응형

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의 예상 완료 시간을 변경합니다.


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

connect timeout=180;

더 깨끗한 방법은 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인스턴스 생성 만 설정할 수 있습니다 . 인스턴스가 생성되면이 값을 변경하지 않습니다.


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


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

다른 사람들이 말했듯이 :

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

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

그러나:

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

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

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


당신은 사용해야합니다 command.CommandTimeout


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

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

연결 시간 제한을 연결 수준 및 명령 수준으로 설정할 수 있습니다.

Add "Connection Timeout=10" to the connection string. Now connection timeout is 10 seconds.

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

}

Set the of CommandTimeout property to 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;
    }

}

참고URL : https://stackoverflow.com/questions/10108565/changing-sqlconnection-timeout

반응형