我正在使用FileHelpers库将CSV文件上传到SQL Server。我想向用户显示无法上传的记录列表。我将SqlServerStorage类的ErrorMode设置为SaveAndContinue,但是当其中一个记录违反foriegn键约束时,InsertRecords方法仍会引发异常。有没有办法保存此错误并继续插入?
SqlServerStorage storage = new SqlServerStorage(typeof(RouteRecord),ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString);
storage.ErrorManager.ErrorMode = FileHelpers.ErrorMode.SaveAndContinue;
storage.InsertRecords((RouteRecord[])Session["successfulRecordArray"]);
感谢。
答案 0 :(得分:0)
查看FileHelpers 2.9.9的代码,DatabaseStorage
似乎没有为SqlServerStorage
类实现,catch
类是InsertRecords(Object[])
的基类。我认为原因可能是出于性能原因而批量处理SQL语句,因此SqlServerStorage
单个记录的错误是不可能的。
通过覆盖sealed
添加丢失的错误处理并不困难,但遗憾的是internal
是ExecuteInBatch
,而某些辅助例程是RouteRecord[]
,所以你最终必须将几个类复制到你的代码中。 (如果这样做,请确保将InsertRecords()
设置为false,以便单独处理每个SQL语句 - 这将影响性能。)
或者,您可以在{{1}}调用之前调用的单独例程中实现对外键冲突的检查(例如,通过枚举{{1}}),但这不会阻止其他错误发生的原因。