SqlDataAdapter UpdateBatchSize строки ошибок
DataAdapter имеет свойство ContinueUpdateOnError, для которого можно установить значение "True", что продолжит обработку команды DataAdapter.Update, даже если возникнет ошибка. Это идеально, так что я могу ловить ошибки в каждой строке данных, которые не могут быть вставлены. Однако это ТОЛЬКО работает, если пакетная обработка выключена (DataAdapter.UpdateBatchSize = 1).
Если для DataAdapter.UpdateBatchSize задано значение 0 или другое число, которое включило бы пакетную обработку, и в записи пакета произошла ошибка, тогда весь пакет завершится неудачей обновления. Очевидно, это не то, что я хочу, чтобы произошло.
В идеале я хотел бы получить смесь двух сценариев. Я хотел бы иметь возможность использовать пакетную обработку, тем самым имея меньше обращений к базе данных при вставке строк, но в то же время я хотел бы иметь возможность отлавливать каждую отдельную ошибку строки по мере ее возникновения (что для по какой-то причине не работает, когда пакетный режим включен, а для ContinueUpdateOnError установлено значение "True"). Мне кажется, это должно быть так или иначе. Я либо вставляю каждую строку по отдельности с путевкой в базу данных для каждой вставки, с возможностью перехвата каждой ошибки строки, либо пытаюсь отправить пакеты на сервер, и если в пакете происходит сбой строки, то происходит сбой всего пакета.
Какие-нибудь мысли?
1 ответ
Со страницы MSDN "Свойство DataAdapter.ContinueUpdateOnError":
Если для ContinueUpdateOnError задано значение true, исключение не выдается, когда происходит ошибка во время обновления строки. Обновление строки пропускается, и информация об ошибке помещается в свойство RowError строки с ошибкой. DataAdapter продолжает обновлять последующие строки.
А со страницы MSDN "Выполнение пакетных операций с использованием адаптеров данных (ADO.NET)":
Пакетное выполнение имеет тот же эффект, что и выполнение каждого отдельного оператора. Операторы выполняются в том порядке, в котором операторы были добавлены в пакет. В пакетном режиме ошибки обрабатываются так же, как и при отключенном пакетном режиме.
Так что либо вы сделали что-то не так, либо документация Microsoft по этому вопросу не надежна