Змінюй хід війни! Допомагай ЗСУ!
  • Знижка на баннерну рекламу 30%! Банер на всіх сторінках сайту, в мобільній та десктопній версії за 14 тис. грн на місяць. Статистика сайту. Контакт: kharkovforum.com@gmail.com

Запрос Update и BackGroundworker (C#)

  • Автор теми Автор теми Sid_Vicious
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 04.11.2008
Повідом.: 154
Запрос Update и BackGroundworker (C#)

Господа, такой вопрос:

выполнятся Update который обновляет >100000 записей БД

Форма конкретно подвисает на минут 20:(, использую BackGroundworker, но непонятно как разбить Update на итерации чтобы передавать данные на progressbar?
Поделитесь соображениями по сабжу, зарнее благодарен
 
возможно поможет использование обработчика события ProgressChanged
(ProgressChangedEventArgs имеет свойство ProgressPercentage)
 
ну так эт понятно) непонятно какие значения передавать этому самому ProgressChanged чтоб внем эти значения присваивать progressbar'у, так как невозможно или непонятно как разбить цельный запрос Update на итерации
 
Я так понимаю, что это один большой запрос к БД?

Можно установить прогрессбар в неопределенное состояние и прогресс будет анимироваться до тех пор, пока не закончится операция(такое событие предоставляет BackGroundworker)
Других путей не видится
 
Я так понимаю, что это один большой запрос к БД?
сам запрос небольшой Update <tablename> set <columnname>=2 where <columname>=1
но он работает с очень большим набором данных
Можно установить прогрессбар в неопределенное состояние и прогресс будет анимироваться до тех пор, пока не закончится операция(такое событие предоставляет BackGroundworker)
Других путей не видится
В этом то и проблема что необходима отображать кол-во записей которые оже обновились
 
Да, я неточно выразился ,но смысл тот же.
В таком случае могу разве что посоветовать разбить на несколько запросов типа
Update <tablename> set <columnname>=2 where <columname>=1 [AND id IN (0,1000)]
и уже по таким диапазонам будете увеличивать счетчик прогрессбара

SQL сервер не предоставляет статистике о ходе выполнения запроса, он покажет ток финальное значение - столько-то строчек затронуто
 
SQL сервер не предоставляет статистике о ходе выполнения запроса, он покажет ток финальное значение - столько-то строчек затронуто
именно это и не радует(
 
можно схимичить, взять среднее время на обновление записи умножить на число записей и обновлять по таймеру прогрес бар, если время вышло, а запрос еще не завершился, тогда неожиданно увеличить общее время и продолжать по таймеру обновлять прогрес бар, и так до тех пор пока запрос не выполнится :)
У микрософта так нередко делается :)

если нужно точное значение строк выводить, тогда прийдется разбить запрос или искать другие пути
 
Назад
Зверху Знизу