ExcelからSQLへ。 BulkCopyの代わりに?

c# sql sqlbulkcopy

質問

DataReaderとSqlBulkCopyを使用してExcelスプレッドシートからMSSQLテーブルにデータをコピーするコードがあります。テーブルにプライマリキーを作成して失敗するまでうまくいきました。私はまずSQLテーブルの内容を削除してから、もう一度Excelのデータを入力します。

私が動いているのはほんの少量のデータなので、BulkCopyを使うよりも良い方法があるのだろうかと思いました。

更新:以下は相対コードです。エラーは次のようになります。 "データソースのString型の指定された値を、指定したターゲット列のfloat型に変換できません。"

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

受け入れられた回答

SqlBulkCopyは自動的にフィールドをマップします。しかし、プライマリキーを追加したので、デフォルトのマッピングはもはや有効ではありません。

SqlBulkCopyオブジェクトに明示的にフィールドのマップ方法を伝えるようにColumnMappingを設定する必要があります。

これは主キー以外のすべてのフィールドで行います(PK上のIDを使用することを前提とします)。

例えば:

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

人気のある回答

主キーを作成すると、ドメインの制約が適用されることが示唆されます(良いことです)。

したがって、実際の問題は、一括挿入を実行する別の方法が必要ではない 、重複したキーがある理由(PKを強制する正確な理由)を調べる必要があるということではありません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ