質問: new DataTable(); detail.Columns.Add(new DataColumn("Stock", Type.GetType("System.Decimal"))); detail.Columns.Add(new DataColumn("Receipts", Type.GetType("System.Decimal"))); detail.Columns.Add(new DataColumn("Orders", Type.GetType("System.Decimal"))); ``` インポートテーブルには、次の順序でフィールドがあります。 ``` ... Stock decimal(18,4), Orders decimal(18,4), Receipts decimal(18,4) ... ``` 本質的に、領収書の値は受注に、受注の受注は受注に、受注の受注は受注に、 明らかに、これはSqlBulkCopyが列挙する列名を尊重していないように見えるためです。 これは私がRedgateのSQL Compareを使用するときの問題です。あるデータベースから別のデータベースに変更をプッシュする場合、列の順序の位置は必ずしも維持されません。 (たとえば、新しい列を3番目の序数フィールドとして挿入すると、SQL Compareはそれをテーブルの同期に追加して最後の列にします)。 これは私の解決策を真剣に駄目です。さて、これらは「インポート」テーブルだけなので、必要に応じて、順序付けされた位置をそのままの状態で移行スクリプトの一部として削除して再作成することができます。私はむしろそれをやっていないだろう。 SqlBulkCopyに記入するように指示する列名を強制的に適用する方法はありますか?
回答: から: > ただし、列数が異なる場合、または順序位置が一致しない場合は、ColumnMappingsを使用して、データが正しい列にコピーされるようにする必要があります。 > > サンプルコードについては、 http: //www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-serverの「カラムのマッピング」を参照してください。