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