質問: 私は大量のデータを1組のテーブルとSQLBulkInsertから別のセットに集める必要があります...残念ながら、ソーステーブルはすべてvarchar(max)で、目的地を正しいタイプにしたいと思います。いくつかのテーブルは何百万行もあります...(あまりにも無意味なポリシングの理由から)私たちはSSISを使用できません。 その上に、いくつかの "ブール"値は "Y / N"、いくつかの "0/1"、 "T / F"、 "真/偽"、最後に "オン/オフ" 型変換を実行するためにIDataReaderをオーバーロードする方法はありますか?列ごとにする必要がありますか? 代わりにマッパーを配置(おそらくAutoMapperまたはカスタム)し、EFを使用してあるオブジェクトからロードし、別のオブジェクトにマップする方法もあります。これは、多くの制御を提供するだけでなく、すべてのプロパティの定型コードをたくさん必要とする:(
回答: 最後に、SQLDataReaderを保持するための基本ラッパークラスを作成し、SQLDataReaderメソッドを呼び出すためにIDataReaderメソッドを実装しました。 次に、基本クラスから継承し、変換する必要がある列名を検索して、ケースごとにGetValueをオーバーライドします。 ``` public override object GetValue(int i) { var landingColumn = GetName(i); string landingValue = base.GetValue(i).ToString(); object stagingValue = null; switch (landingColumn) { case "D4DTE": stagingValue = landingValue.FromStringDate(); break; case "D4BRAR": stagingValue = landingValue.ToDecimal(); break; default: stagingValue = landingValue; break; } return stagingValue; } ``` SQLBulkUploadのおかげで、うまく動作し、拡張性があり、非常に高速です。 [OK]をクリックすると、保守オーバーヘッドは少なくなりますが、ソース列はほとんど変更されないため、実際には何の影響もありません。