2013-06-29 1 views
1

У меня есть приложение VB.NET. У этого же есть некоторый запрос, результат которого будет отображаться в DataGridView. Для выполнения моего запроса потребуется от 2 до 3 минут. Теперь я хочу показать панель прогресса на панели состояния, которая отобразит прогресс Data Retrieve. После завершения, он будет скрываться от Statusbar, и Label покажет «Completed». Если какой-нибудь эксперт мне поможет, я буду ему благодарен.Как показать строку выполнения в строке состояния, когда SQL Query извлекает данные с SQL Server?

ответ

2

Вы сомневаетесь, что покрывает много земли. Первое, что приходит мне на ум, - почему у вас есть запрос, который так долго запускается и может быть оптимизирован? Как бит - это набор данных, который вы возвращаете? 10 строк, 100s строк, 100000s? Если набор данных большой, используете ли вы разбивку на страницы? ADO.Net предоставляет асинхронную модель интерфейса, см. Здесь Async SQLCommand. Одна из возможностей - выдать запрос async, а затем отобразить индикатор выполнения и закрыть индикатор выполнения, когда вы получите заполненное уведомление.

Другим вариантом является запуск запроса в другом потоке, но это, вероятно, не требуется, если вы можете использовать SQL-команду async. Однако, если вы хотите показать индикатор выполнения, который обновляет, пока не будет отображаться%, в отличие от индикатора ожидания, это будет сложной задачей. Во-первых, вы не знаете, сколько времени займет запрос. Это не детерминированный процесс, такой как чтение файла с диска, где вы можете оценить размер файла, скорость передачи и т. Д. Я не думаю, что на SQL-сервере есть какой-либо механизм для запроса: «Как мой запрос идет?» Бедной и расточительной альтернативой было бы сначала запустить один запрос, чтобы получить подсчет записей, которые вы ожидаете, а затем разделить полученный запрос на более мелкие подзапросы с некоторым параметром диапазона и выполнить в «кусках». Опять же, это неэффективно. Может, кто-то знает об альтернативах.