2011-02-05 4 views
1

내 데이터베이스 querys에 대한 시간 제한을 구현하려고 ... 그래서 작업이 너무 오래 실행되면 쿼리를 취소하고 asp.net 페이지에 시간 초과 메시지를 반환해야합니다 ... .asp.net에서 스레딩

어떤 도움이 많이 감사합니다

RunSearch search = new RunSearch(GetSearchResults); 
Thread searchThread = new Thread(delegate() { 
dsRes = search.Invoke(ProcessingID, 
objSqlConnection,SearchStartTime); }); 

searchThread.Start(); 
// searchThread.Join(ResultPollingPeriod * 1000); 

if (!searchThread.Join(ResultPollingPeriod * 1000)) 
{ 
    searchThread.Abort(); 
    dsRes = null; 
    return ReturnTimeoutMessage(); 
} 
else 
{ 
    return dsRes; 
} 

을 heres

내가 시간 초과 부분에 사용 된 코드 .... 문제는 내가 가끔 쿼리에서 부분적인 결과 집합을 얻고있다 ...

답변

1

목표에 따라 처리 할 수있는 몇 가지 방법이 있지만 내가 작성하지 않아도됩니다. 이것의 구현. 데이터베이스에서 시간 초과를 설정할 수 있으므로 코드에서이 작업을 처리 할 필요가 없습니다. 고려해야 할 두 가지 유형의 시간 제한이 있지만 여기에는 클라이언트 측 정의가 필요합니다. 연결 시간 초과 및 명령 시간 초과.

연결 시간 초과는 서버에 연결할 수없는 경우입니다. 이것은 Connect Timeout=30을 추가하여 연결 문자열 설정에서 설정됩니다. 30 초 이내에 연결을 설정하지 않으면 시간 초과됩니다.

는 연결을 설정 않는 경우, 당신은 SqlCommand 개체의 명령 제한 시간이 필요합니다

using (SqlCommand myCommand = new SqlCommand()) 
{ 
    myCommand.CommandTimeout = 30; 
    //the rest of your command setup here 
} 

그것은 나의 이해는 CommandTimeout이이 연결 시간 초과와 동시에 실행되는의를 - 그래서 29 초 정도 걸리는 경우 연결 명령은 1 초 이내에 실행되고 리턴되어야합니다.

이러한 제한 시간은 사용자가 원하는대로 catch하고 수행 할 수있는 예외를 throw합니다 (ASP.NET 페이지에 시간 초과 메시지를 반환하는 등).