Допомагаємо ЗСУ!

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

🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 04.11.2008
Повідом.: 154
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Запрос Update и BackGroundworker (C#)

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

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

Форма конкретно подвисает на минут 20:(, использую BackGroundworker, но непонятно как разбить Update на итерации чтобы передавать данные на progressbar?
Поделитесь соображениями по сабжу, зарнее благодарен
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
возможно поможет использование обработчика события ProgressChanged
(ProgressChangedEventArgs имеет свойство ProgressPercentage)
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
ну так эт понятно) непонятно какие значения передавать этому самому ProgressChanged чтоб внем эти значения присваивать progressbar'у, так как невозможно или непонятно как разбить цельный запрос Update на итерации
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
Я так понимаю, что это один большой запрос к БД?

Можно установить прогрессбар в неопределенное состояние и прогресс будет анимироваться до тех пор, пока не закончится операция(такое событие предоставляет BackGroundworker)
Других путей не видится
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
Я так понимаю, что это один большой запрос к БД?
сам запрос небольшой Update <tablename> set <columnname>=2 where <columname>=1
но он работает с очень большим набором данных
Можно установить прогрессбар в неопределенное состояние и прогресс будет анимироваться до тех пор, пока не закончится операция(такое событие предоставляет BackGroundworker)
Других путей не видится
В этом то и проблема что необходима отображать кол-во записей которые оже обновились
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
Да, я неточно выразился ,но смысл тот же.
В таком случае могу разве что посоветовать разбить на несколько запросов типа
Update <tablename> set <columnname>=2 where <columname>=1 [AND id IN (0,1000)]
и уже по таким диапазонам будете увеличивать счетчик прогрессбара

SQL сервер не предоставляет статистике о ходе выполнения запроса, он покажет ток финальное значение - столько-то строчек затронуто
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
SQL сервер не предоставляет статистике о ходе выполнения запроса, он покажет ток финальное значение - столько-то строчек затронуто
именно это и не радует(
 
  • 🟡 09:55 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
можно схимичить, взять среднее время на обновление записи умножить на число записей и обновлять по таймеру прогрес бар, если время вышло, а запрос еще не завершился, тогда неожиданно увеличить общее время и продолжать по таймеру обновлять прогрес бар, и так до тех пор пока запрос не выполнится :)
У микрософта так нередко делается :)

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