0

FileHelpersライブラリを使用してCSVファイルをSQLServerにアップロードしています。エラーに対してアップロードできなかったレコードのリストをユーザーに提示したいと思います。SqlServerStorageクラスのErrorModeをSaveAndContinueに設定していますが、レコードの1つが外部キー制約に違反している場合でもInsertRecordsメソッドは例外をスローします。このエラーを保存して挿入を続行する方法はありますか?

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

ありがとう。

4

1 に答える 1

0

FileHelpers 2.9.9のコードを見ると、FileHelpersエラー処理DatabaseStorageはの基本クラスであるクラスに実装されていないようですSqlServerStorage。おそらく、パフォーマンス上の理由からSQLステートメントがバッチとして処理されるためcatch、個々のレコードのエラーが発生する可能性がないためだと思います。

欠落しているエラー処理をオーバーライドして追加することはそれほど難しくありませんがInsertRecords(Object[])、残念ながら、一部のヘルパールーチンはSqlServerStorageオーバーライドされているため、コードにいくつかのクラスをコピーする必要があります。(これを行う場合は、必ずfalseに設定して、各SQLステートメントが個別に処理されるようにしてください。これはパフォーマンスに影響します)。sealedinternalExecuteInBatch

RouteRecord[]または、呼び出しの前に呼び出される別のルーチンで外部キー違反のチェックを実装することもできますが(たとえば、列挙することによって)、InsertRecords()他の理由でエラーが発生するのを防ぐことはできません。

于 2012-01-18T10:48:56.583 に答える