2010-04-04 4 views
0

타임 아웃에 문제가 있습니다. 앱을 통해 명령을 실행할 때 시간 초과 예외가 발생하지만 SQL에서 직접 실행하면 시간 초과 예외가 발생하지 않습니다!문제 withAsync SqlComman

내 SP는 직접 실행할 때 약 11 분 정도 걸립니다. 이 문제를 해결하기 위해 여기 아래 코드를 찾았지만 제대로 작동하지 않습니다! beginExecute 직후에 IAsyncResult.iscomplete가 true가됩니다 !!!!

어디에 문제가 있습니까?

IAsyncResult result = command.BeginExecuteNonQuery(); 

    int count = 0; 
    while (!result.IsCompleted) 
    { 
     Console.WriteLine("Waiting ({0})", count++); 
     System.Threading.Thread.Sleep(1000); 
    } 
    Console.WriteLine("Command complete. Affected {0} rows.", 
    command.EndExecuteNonQuery(result)); 

관련

답변

0

대신 명령 시간 초과 (SqlCommand.CommandTimeout)를 기본적으로 30 초로 늘립니다.

+0

Command에 다른 시간 초과가 있다는 것을 알지 못했습니다! 감사합니다. 내 주요 문제가 해결되었습니다. 하지만 IAsync는 어떻게됩니까? – Alibm

+0

결과가 있습니까? 명령 텍스트로 무엇을 지정하고 있습니까? –

0

연결 문자열은 15 초 시간 제한을 기본값으로 사용합니다. MSDN에서 확인하십시오.

연결 문자열의 시간 초과를 더 오래 지속하도록 변경할 수 있습니다 (connection timeout=600, 10 분 제한 시간).

연결 문자열에 대한 자세한 내용은 this 사이트를 참조하십시오.

그렇다면 데이터베이스 및/또는 저장 프로 시저를 최적화해야합니다. 저장 프로 시저의 경우 11 분이 소요됩니다. 테이블에 올바른 인덱스가 있습니까? 가장 최적의 방법으로 작성된 저장 프로 시저입니까?

업데이트 :

당신이 올바른 명령을 사용하고 결과가 올바른지 확인 했습니까? IsComplete가 사실이라면 거의 즉시 명령이 완료되었음을 알 수 있습니다.

+0

응답 주셔서 감사합니다. 연결 문자열에서 시간 초과가 증가했지만 작동하지 않았습니다. 이 sp에서 나는 계층 적으로 3 개의 테이블에서 작업해야한다. 나는 3 개의 커서를 가지고 있으며이 3 개의 테이블에 대해 계층 적으로 사용했다! – Alibm

+0

@Alibm - 커서 대신 3 개의 조인이 잘못 되었습니까? – Oded

+0

나는 이러한 모든 레코드를 읽고 newyaer에 삽입해야하므로 자식 테이블에 대한 새 ID가 필요합니다. – Alibm