sourcecode

SqlConnection 시간 초과 변경

copyscript 2023. 5. 29. 11:06
반응형

SqlConnection 시간 초과 변경

기본값을 재정의하려고 합니다.SqlConnection15초의 시간 제한이 있고 다음과 같은 오류가 발생합니다.

읽기 전용이므로 속성 또는 인덱서를 할당할 수 없습니다.

이 일을 피할 방법이 있습니까?

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 에서 확인하실 수 있습니다.

아닐이 암시하는 바와 같이, 연결시간 제한은 필요하지 않을 수 있습니다. 시간 제한은 새 연결을 설정할 때 ADO 드라이버가 대기하는 시간을 제어합니다.특정 SQL 쿼리가 실행될 때까지 정상보다 오래 기다려야 하는 것으로 보이며, 이 경우 Anil이 정확합니다. CommandTimeout(R/W)을 사용하여 개별 SQL Command의 예상 완료 시간을 변경합니다.

더 깨끗한 방법은 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;

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

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

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

이전 게시물이지만 검색하던 내용이 나타나면서 이 주제에 정보를 추가해야겠다고 생각했습니다.제가 댓글을 달려고 했는데, 댓글이 부족해요.

다른 사람들이 말했듯이,

연결.연결초기 연결에 시간 초과가 사용됨

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

그러나:

연결.연결시간 초과는 트랜잭션을 커밋하고 롤백하는 데도 사용됩니다.

네, 이것은 완전히 미친 디자인 결정입니다.

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

연결 시간 초과를 연결 수준 및 명령 수준으로 설정할 수 있습니다.

연결 문자열에 "연결 시간 초과=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;
    }

}

저는 이 주제에 대한 훌륭한 블로그 게시물을 찾았습니다: https://improve.dk/controlling-sqlconnection-timeouts/

기본적으로 연결 문자열에 다음과 같이 연결 시간 초과를 설정합니다.

Data Source=server;Initial Catalog=databaseUser Id=username;Password=password;Connect Timeout=30

또는 연결을 설정합니다.다음과 같은 명령 개체의 시간 초과:

sqlCommand.CommandTimeout = 30;

시간 초과 시간은 초 단위입니다.

또한 이 제한 시간은 서버가 중단되거나 과부하 상태가 된 경우와 같은 상황으로 인한 연결 손실을 고려하지 않습니다.그러면 결국 TCP 시간 초과가 트리거됩니다.블로그 게시물에서 이를 처리할 수 있는 좋은 확장 예제를 확인하십시오.

은 야합다니해를 사용해야 .command.CommandTimeout

언급URL : https://stackoverflow.com/questions/10108565/changing-sqlconnection-timeout

반응형