c# 오라클 CommandTimeout이 작동하지 않습니다.




c# 오라클 데이터 가져 오기 (4)

주어진 연결 문자열에 대한 연결을 테스트하는 메서드에서 SqlCommand 쿼리의 시간 제한을 변경하려고합니다. 코드는 다음과 유사합니다.

using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand cmd = new SqlCommand("SELECT ...", connection);
      cmd.CommandTimeout = 10;
      connection.Open();
      SqlDataReader reader = cmd.ExecuteReader();
      ...
      connection.Close();
    }

나는 단지이 연결 문자열이 괜찮은지 테스트하기 때문에 짧은 시간 제한을 갖고 싶습니다. 하지만 CommandTimeout (0, 1, 2, 4, 10, 30, 60, 120)에서 설정 한 숫자에 관계없이 더미 연결 문자열에 대해 얻은 실시간은 항상 동일합니다 (대략 총 실행 시간 15 초).

그래서 CommandTimeout에 설정 한 값이 어떤 이유로 무시되고있는 것 같습니다.

어떤 아이디어?


SqlCommand.CommandTimeout 이 정확히 무엇인지 혼란 스럽습니다. msdn.microsoft.com/en-us/library/… :

명령을 실행하고 오류를 생성하기 전에 대기 시간을 가져 오거나 설정합니다.

귀하의 경우에는 DataReader를 실행하고 쿼리를 단계별로 실행하고 있습니다. 각 Read() 에 대해 최소한의 시간이 걸리므로 제한 시간을 초과하지는 않습니다.

편집 :

잘못된 연결 문자열을 사용하는 경우 Timeout 은 Command timeout이 아니지만 Connection time입니다. 기본값은 15 초입니다. 그것은 당신의 상황에 효과적인 타임 아웃입니다.

SqlCommand.ExecuteReader() 아니라 SqlConnection.Open() 메서드 호출에서 시간 초과가 발생합니다. 따라서 ConnectionTimeout 속성은 유효한 시간 초과 값이됩니다.

SqlConnection.ConnectionTimeout 속성 MSDN 참조


설정 파일의 연결 문자열에 다음을 지정할 수도 있습니다.

<connectionStrings>
  <add name="*con_name*" connectionString="data source=*dsource*;initial catalog=*catalog*;integrated security=True;Connect Timeout=300;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>


또한 기본값 인 15 초가있는 연결 시간 초과를 확인해야합니다.

msdn.microsoft.com/en-us/library/… - 연결 문자열에 컨텍스트가있는 경우 CommandTimeout이 무시됩니다.





ado.net