質問: 私はスプレッドシートからSQL ServerデータベースにレコードをインポートするためにSqlBulkCopyを使用しています。 一括コピー操作はほとんどの条件下で正常に動作します。しかし、それは私が頭を上げることができない何かをやっている。 私は私の列のマッピングで定義された列を持っています: ``` bCopy.ColumnMappings.Add("Amount", "Amount"); ``` スプレッドシートでは、ワークテーブルにあるように、これはvarcharです(ライブテーブルにデータを移動する前に作業テーブルにインポートして検証します)。 私がテストをしている間、私は記録に入り、数値をFOOという単語に変更しました。それから私はインポートを実行しました。 私の検証ルーチンは列の問題を正しく識別しますが、値が数値ではないため、列がNULLであるためです。データベースをチェックすると、このフィールドがNULL値でインポートされていることがわかりました。私はその価値がFOOだったはずだと思った。 これは私を奇妙なものとして襲う。 何か違いがあれば、OLEDBを使ってデータベーステーブルのようなスプレッドシートにアクセスし、OLEDBDataReaderをBulkCopyオブジェクトのソースとして渡します。 OLEDBドライバは、この列の有効な値ではないことを認識するには十分にスマートですか?私はすべてがデフォルトでstring / varcharになると思った。 (スプレッドシートの列データ型を変更しません) **EDIT** 私は示唆しているようにdataReaderをチェックしました。そして、奇妙なことに、Amountフィールドを文字列値に変更すると、データウェアハウスの値はnullになります。私がこの種の動作をExcelデータウェアハウスで初めて見たのはこれです。他の文字列フィールドは正常に動作します。
回答: OLEDB接続文字列にIMEX = 1を追加することで問題を解決しました。これで値がデータエリアに表示されます。 (私は混合値の列をサポートするためにこれを行う必要があると思います)