2017-03-14 7 views
0

私はFileHelpersライブラリを使用してタブ区切りファイルをインポートしています。私はErrorMode.SaveAndContinueを有効にしました。私が直面してる問題は、無効なデータ型FileHelpersとデータ型例外

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

単一のレコードに(例えば、小数点?価格フィールドがXXXXXXで文字列値を持っている)しているときに、特定のフィールド、ライブラリーは、最初のフィールド値に対してチェックしていることで、 ErrorManager.Errorsに記録された内部例外がスローされます。

同じ行の残りのフィールドもチェックして、エラーを同じサイクルで記録する必要があります。

どうすればいいですか?

**私はCustomConverterを作成しようとしましたが、もう一度ConvertExceptionをスローしてErrorManagerによってキャッチされ、次の行に移動する必要があることに注意してください。

AfterReadRecordは行動が、ライブラリの最初のバージョンからのデザインであることを理由に例外

答えて

1

で呼び出されません、例外がスローされ、問題を発見したかのErrorManagerが存在

場合は、エラーがログに記録されたとき

あなたの問題を解決する最良の方法は、あなたがAfterReadRecord方法で必要な検証を行い、後の価格のための文字列フィールドを使用することです。例えば

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

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

コメントありがとうMarcosMeli。実際に私は> 100のようなこれらのプロパティの多くを持っているモデルクラスをたくさん持っています。私はすべてのモデルクラスでコーディングする必要がないように再利用可能なアプローチを使いたいと思います。方法がありますが、私は手動でエラーにログインし、続行することができます例外がある場合、私のコンバータでEngine.ErroorManagerのハンドルを得ることができますか? 私の他の質問は私が直接DSに読んでいるということです。これらの余分なプロパティをクラス内の各フィールドに生成すると、それらもDTに取り込まれますか?それらをDTから除外することはできますか? – Abdullah

+0

フィールドを文字列に変換し、[FieldIgnored]属性を持つdecimal型の別の新しいフィールドを作成しました。妥当性検査はうまくいきましたが、現在はdbTableへのDataTableマッピングが残っています。 ファイルからの読み取り中に新しいフィールドが無視されるが、データベースにコピーするときにDataTableに追加されることを確認するにはどうすればよいですか? ありがとう – Abdullah

+0

私は古いアプローチを使用して終了しました。すなわち、engine.ReadFile(xxx)メソッドを使用してファイルを読み込み、レコードのコレクションを取得し、プライベートフィールドを使用して各レコードを挿入して手動でデータテーブルを作成します。 私は何か間違っていない限り、正しい方法だと思っています。 – Abdullah

関連する問題