4

SqlBulkCopy を使用して、アプリケーションで DataTable を手動で設定することにより、DB テーブルに新しい行を挿入しようとしています。

これは、3 つの列で構成される複合主キーを持つテーブルを除くすべてのテーブルで正常に機能します。このテーブルに何かを SqlBulkCopy しようとすると、次のエラーが発生します。

Violation of PRIMARY KEY constraint 'PK_MYCOMPOSITEKEY'. Cannot insert duplicate key in object 'dbo.MyTable'.
The statement has been terminated.

これは可能ですか?

次のように DataTable の主キーを設定しようとしました。

dt.PrimaryKey = new[] {dt.Columns["PKcolumn1"], dt.Columns["PKcolumn2"], dt.Columns["PKcolumn3"]};

しかし、やはり運が悪い。

4

3 に答える 3

1

DB にアクセスする前に、バルク データのコピーを確認する必要があります。問題が存在する可能性もあります (既存の制約や DB のレコードと衝突するだけではありません)。それは機能し、通常は報告するのが正しいです。

それにもかかわらず、DataSet または DataReaders のショー全体は、マッピング、不適切な型のない設計、多くの不要な変換、割り当て、object[] ベースの値の乱雑な演習であり、全体が順序、型、および文字列に依存する混乱になります (MS のみの何か)設計でき、設計し続けます)。一方、ネイティブ OLEDB バルク インターフェイスは、はるかにクリーンです。

于 2009-10-09T21:57:12.320 に答える
1

ステージング テーブルへの一括挿入。重複レコードをクリーンアップします。次に、ストレート SQL を使用して挿入を行います。挿入コードを記述するときは、prod テーブルにないステージング テーブルのレコードに限定してください。

于 2009-10-09T21:50:56.830 に答える
1

あなたが抱えている問題はデータにあります。

入力ファイルには、次のいずれかまたは両方があります。

テーブルに既にあるのと同じデータが e pk 列にある行

また

ファイルには、pk 列の値が同じ行が少なくとも 2 つある

于 2009-10-09T21:24:41.877 に答える