[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 도 트랜잭션 커밋 및 롤백 사용됩니다.
예, 이것은 절대적으로 미친 디자인 결정입니다.
따라서 커밋 또는 롤백시 시간 초과가 발생하는 경우 연결 문자열을 통해이 값을 늘려야합니다.