SqlDataAdapter UpdateBatchSize строки ошибок - PullRequest
0 голосов
/ 16 сентября 2011

DataAdapter имеет свойство ContinueUpdateOnError, для которого можно установить значение «True», что будет продолжать обработку команды DataAdapter.Update, даже если возникла ошибка.Это идеально, поэтому я могу отлавливать ошибки в каждой строке данных, которые не могут быть вставлены.Однако это ТОЛЬКО работает правильно, если пакетная обработка выключена (DataAdapter.UpdateBatchSize = 1).

Если для DataAdapter.UpdateBatchSize задано значение 0 или другое число, которое включит пакетную обработку, и возникнет ошибкавнутри записи пакета, тогда весь пакет не проходит обновление.Очевидно, это не то, чего я хочу.

В идеале я хотел бы получить смесь двух сценариев.Я хотел бы иметь возможность использовать пакетную обработку, тем самым имея меньше обращений к базе данных при вставке строк, но в то же время я хотел бы иметь возможность отлавливать каждую отдельную ошибку строки по мере ее возникновения (что дляпо какой-то причине не работает, когда пакетный режим включен, а для ContinueUpdateOnError установлено значение «True»).Мне кажется, это должно быть так или иначе.Я либо вставляю каждую строку в отдельности с путевкой в ​​базу данных для каждой вставки, с возможностью перехвата каждой ошибки строки, либо пытаюсь отправить пакеты на сервер, и если в пакете происходит сбой строки, то происходит сбой всего пакета.

Есть мысли?

1 Ответ

0 голосов
/ 28 февраля 2012

Со страницы MSDN «Свойство DataAdapter.ContinueUpdateOnError»:

Если для ContinueUpdateOnError задано значение true, исключение не выдается при возникновении ошибки во время обновления строки.Обновление строки пропускается, и информация об ошибке помещается в свойство RowError строки с ошибкой.DataAdapter продолжает обновлять последующие строки.

А со страницы MSDN «Выполнение пакетных операций с использованием DataAdapters (ADO.NET)»:

Пакетное выполнение имеет тот же эффект, что ивыполнение каждого отдельного заявления.Операторы выполняются в том порядке, в котором операторы были добавлены в пакет.В пакетном режиме ошибки обрабатываются так же, как и в случае, если пакетный режим отключен.

Так что либо вы сделали что-то не так, либо документация Microsoft по этому вопросу не надежна.

...