2017-03-14 36 views
0

我正在使用FileHelpers库导入制表符分隔的文件。我已启用ErrorMode.SaveAndContinue。我现在面临的问题是,当特定领域具有无效的数据类型FileHelpers和数据类型异常

[FieldConverter(ConverterKind.Decimal)] 
public decimal? Price; 

(如小数点?价格区域中有XXXXXX字符串值),在一个单一的记录,图书馆只对第一个字段值检查和抛出ErrorManager.Errors中记录的内部异常。

我需要检查同一行上的其余字段,并在同一个周期内记录它们的错误。

我该怎么做?

**请注意,我已经尝试编写CustomConverter,但是我需要再次抛出ConvertException,以便它可以被ErrorManager捕获,并且它只是移动到下一行。

的AfterReadRecord不会被因为异常

回答

1

这种行为是从库的第一个版本设计的调用,例外的是抛出发现了这个问题,或者当被记录的错误,如果错误管理存在

解决问题的最佳方法是使用一个字符串领域的价格,后来又看见你在AfterReadRecord方法需要验证

例如

public class YourClass: INotifyRead 
{ 
[FieldConverter(ConverterKind.Decimal)] 
public string Price; 

void AfterReadRecord (...) 
// Validate inside this method 
} 
+0

感谢您对MarcosMeli的评论。其实我有大量的模型类,其中有很多像> 100这些属性。我想使用可重用的方法,以便我不必在每个模型类中编码。有没有办法,我可以得到引擎的处理.ErroorManager在我的Converter中,如果有异常,我可以手动登录到错误并继续。 我的另一个问题是,我直接阅读DS.如果我为我的课程中的每个字段生成这些额外的属性,他们是否也会填充到DT?我可以从DT中排除它们吗? – Abdullah

+0

我已将该字段转换为字符串,并使用[FieldIgnored]属性创建了另一个具有十进制类型的新字段。验证过去不错,但现在我被困在DataTable映射到db列。 如何确保在从文件读取时忽略新字段,但在复制到数据库时将其添加到DataTable中? 谢谢 – Abdullah

+0

我最后使用旧的方法。即使用engine.ReadFile(xxx)方法读取文件以获取记录集合,然后通过使用专用字段将每条记录插入到其中来手动创建数据表。 希望这是正确的方式,除非我做错了什么。 – Abdullah