FileHelpers и SQL Insert с классом SqlServerStorage --- Как показать ошибки - PullRequest
0 голосов
/ 18 января 2012

Я использую библиотеки FileHelpers для загрузки файла CSV на SQL Server. Я хотел бы представить пользователю список записей, которые не могут быть загружены из-за ошибок. Я устанавливаю ErrorMode класса SqlServerStorage в SaveAndContinue, однако метод InsertRecords по-прежнему выдает исключение, когда одна из записей нарушает ограничение внешнего ключа. Есть ли способ сохранить эту ошибку и продолжить вставку?

SqlServerStorage storage = new SqlServerStorage(typeof(RouteRecord),ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString);
storage.ErrorManager.ErrorMode = FileHelpers.ErrorMode.SaveAndContinue;
storage.InsertRecords((RouteRecord[])Session["successfulRecordArray"]);

Спасибо.

1 Ответ

0 голосов
/ 18 января 2012

Глядя на код для FileHelpers 2.9.9, Обработка ошибок FileHelpers , похоже, не реализована для класса DatabaseStorage, который является базовым классом для SqlServerStorage.Я думаю, что причина, вероятно, в том, что операторы SQL обрабатываются, как в пакетах, из соображений производительности, поэтому невозможно catch ошибка отдельной записи.

Не было бы слишком сложно добавить отсутствующиеобработка ошибок путем переопределения InsertRecords(Object[]), но, к сожалению, SqlServerStorage - это sealed, а некоторые из вспомогательных подпрограмм - internal, поэтому вам придется скопировать несколько классов в ваш код.(Если вы сделаете это, убедитесь, что вы установили ExecuteInBatch в значение false, чтобы каждый оператор SQL обрабатывался индивидуально - это будет влиять на производительность.)например, перечисляя RouteRecord[]) в отдельной подпрограмме, которая вызывается перед вызовом InsertRecords(), но это не предотвратит ошибки, возникающие по другим причинам.

...