2013-06-29 1 views
1

VB.NET 응용 프로그램이 있습니다. 동일한 쿼리에서 DataGridView에 결과가 표시됩니다. 내 쿼리를 실행하는 데 2 ​​~ 3 분이 필요합니다. 이제 데이터 검색 진행률을 표시하는 상태 표시 줄에 진행률 표시 줄을 표시하려고합니다. 완료 후 상태 표시 줄에서 숨기고 레이블에 "완료 됨"이 표시됩니다. 전문가가 도와 주면 그에게 감사 할 것입니다.SQL 쿼리가 SQL Server에서 데이터를 검색 할 때 상태 표시 줄에 진행률 막대를 표시하는 방법?

답변

2

당신은 많은 논점을 다루고 있습니다. 가장 먼저 떠오르는 점은 쿼리를 실행하는 데 오랜 시간이 걸리는 이유와 최적화 할 수 있는지 여부입니다. 반환하는 데이터 세트는 몇 비트입니까? 10 행, 100 행, 100000s? 데이터 집합이 큰 경우 페이지 매김을 사용하고 있습니까? ADO.Net은 비동기 인터페이스 모델을 제공합니다 (여기 Async SQLCommand 참조). 한 가지 가능성은 쿼리를 비동기로 실행 한 다음 진행률 표시 줄을 표시하고 완료 알림을 받으면 진행률 표시 줄을 닫는 것입니다.

또 다른 옵션은 다른 스레드에서 쿼리를 시작하는 것입니다.하지만 비동기 SQLCommand를 사용할 수있는 경우에는 필요하지 않습니다. 그러나 "대기 중"표시기와 달리 % 완료 표시로 업데이트하는 진행률 표시 줄을 표시하려면 문제가 발생합니다. 한 가지 방법은 쿼리에 소요되는 시간에 대한 단서가 없습니다. 파일 크기, 전송 속도 등을 예측할 수있는 디스크에서 파일을 읽는 것과 같은 결정적인 프로세스는 아닙니다. SQL 서버에서 쿼리를 수행하는 메커니즘이 없다고 생각합니다. "내 쿼리는 어떻게됩니까?" 불충분하고 낭비적인 대안은 예상되는 레코드 수를 얻기 위해 하나의 쿼리를 먼저 실행 한 다음 페치 쿼리를 범위 매개 변수가있는 더 작은 하위 쿼리로 나누고 "청크"로 실행하는 것입니다. 다시 말하지만, 그것은 효율적이지 않습니다. 어쩌면 누군가가 대안을 안다.