Я хочу показать пользователю подробную информацию о ходе выполнения потенциально длительных операций с базой данных. В частности, при вставке / обновлении данных, размер которых может составлять порядка сотен КБ или МБ.
В настоящее время я использую DataTables и DataRow в памяти, которые затем синхронизируются с базой данных с помощью вызовов TableAdapter.Update. Это работает отлично и изящно, но единственный вызов оставляет мало возможностей для сбора какой-либо информации о ходе выполнения, чтобы показать ее пользователю. Я понятия не имею, сколько данных передается по сети в удаленную БД и каков прогресс. По сути, все, что я знаю, - это когда обновление возвращается, и оно считается завершенным (за исключением любых ошибок или исключений). Но это означает, что все, что я могу показать, это 0%, затем пауза, а затем 100%.
Я могу подсчитать количество строк, даже зайдя так далеко, чтобы определить, сколько на самом деле изменено или добавлено, и я мог бы даже, возможно, рассчитать для каждого DataRow его предполагаемый размер на основе типа данных каждого столбца, используя sizeof для типов значений, таких как int и проверки length для таких вещей, как строки или байтовые массивы. При этом я, вероятно, мог бы определить перед обновлением приблизительный общий размер передачи, но я все еще застрял без какой-либо информации о ходе после того, как Update вызывается в TableAdapter.
Я застрял, просто используя неопределенный индикатор выполнения или курсор ожидания мыши? Нужно ли мне радикально изменить наш уровень доступа к данным, чтобы иметь возможность подключаться к такой информации? Даже если я не могу получить точный переданный КБ (например, индикатор загрузки файла в веб-браузере), могу ли я хотя бы знать, когда заканчивается каждый DataRow / DataTable или что-то в этом роде?
Как лучше всего показать такую информацию о прогрессе с помощью ADO.NET?