0

我正在使用 FileHelpers 库将 CSV 文件上传到 SQL Server。我想向用户展示一个无法上传的记录列表,这是由于错误造成的。我将 SqlServerStorage 类的 ErrorMode 设置为 SaveAndContinue,但是当其中一条记录违反外键约束时,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 的代码,似乎没有为DatabaseStorage作为SqlServerStorage. 我认为原因可能是,出于性能原因,SQL 语句被批量处理,因此不可能出现catch单个记录的错误。

通过覆盖来添加缺少的错误处理并不难InsertRecords(Object[]),但不幸SqlServerStorage的是sealed,并且一些辅助例程是internal,因此您最终不得不将几个类复制到您的代码中。(如果这样做,请确保设置ExecuteInBatch为 false,以便单独处理每个 SQL 语句 - 这会影响性能)。

RouteRecord[]或者,您可以在调用之前调用的单独例程中实现对外键违规的一些检查(例如,通过枚举) InsertRecords(),但这不会防止由于其他原因而发生错误。

于 2012-01-18T10:48:56.583 回答