Я думаю, что первое, что вы должны сделать, это включить ваши вставки в транзакцию.
Если для одной транзакции слишком много записей, вы можете выполнять фиксацию каждые n записей (скажем, 500).
Что касается возврата веб-страницы, возможно, вы достигли некоторого времени ожидания, когда IIS или клиент отклоняет запрос, или если вы обновляете страницу данными, у вас могут быть недействительные данные, которые вызывают ошибки на странице.
Для этого вам следует проверить журнал событий Windows, чтобы узнать, сообщают ли IIS или ASP.Net о каких-либо исключениях. Вы также можете запустить fiddler , чтобы увидеть, что происходит с запросом.
Наконец, я настоятельно рекомендую изменить дизайн, который не требует от пользователя ожидания с отправленной формой на экране до завершения обработки.
Стандартный шаблон, который мы используем для этого типа функциональности, состоит в том, чтобы записывать входящие запросы в базу данных с GUID, запускать фонового работника для выполнения задачи и возвращать GUID клиенту.
Когда фоновый работник завершил (или обнаружил ошибку), он обновляет таблицу запросов в базе данных новым статусом (то есть, успешным или неудачным) и сообщением об ошибке, если таковое имеется.
Клиент может использовать GUID для регулярной отправки ajax-запросов на веб-сервер (используя window.timeout, чтобы не блокировать пользователя и не отображать анимацию), чтобы определить, завершен ли процесс. После завершения процесса пользовательский интерфейс может быть обновлен по мере необходимости.
Обновление
Для записи входящих запросов в базу данных с идентификатором GUID создайте таблицу, содержащую столбец GUID в качестве первичного ключа, столбец состояния (3 значения: выполняется, успешно, отказ) и столбец сообщения об ошибке.
Когда запрос получен, создайте новый GUID в своем коде, затем запишите запись в эту новую таблицу с этим GUID и текущим состоянием до запуска фонового работника.
Вы передадите GUID фоновому работнику, чтобы он мог обновить таблицу по завершении (он просто обновляет этот статус для завершения или для ошибки и записывает сообщение об ошибке, если таковое имеется).
Вы также передадите GUID обратно клиенту через javascript, чтобы клиент мог периодически просить веб-сервер выполнить запрос к таблице, используя GUID, чтобы определить, когда запрос больше не выполняется.