74

このオブジェクトを使用して、SqlBulkCopy生成された数百万行をデータベースに挿入しています。唯一の問題は、挿入先のテーブルにID列があることです。に設定し、ID列を's、およびに設定SqlBulkCopyOptionsしてみました。どれもうまくいきませんでした。誰かが私に素晴らしいことを教えてくれたら、私はかなり単純なものを見逃しているように感じます。ありがとう!SqlBulkCopyOptions.KeepIdentity0DbNull.Valuenull

編集DataTable明確にするために、インポートしているID値が設定されていません。インポートの一部として生成されるようにしたい。

edit2 これがベースSqlBulkCopyオブジェクトの作成に使用するコードです。

SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;

private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = 
    SqlBulkCopyOptions.Default) 
{
    Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
    string connString =
    cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
    return new SqlBulkCopy(connString, options);
}
4

9 に答える 9

47

宛先テーブルに ID を割り当てるには、このオプションを使用しないでください。SqlBulkCopyOptions.KeepIdentity代わりに、ソースから ID をマップしたり、ソースから ID を抽出して に送信したりしないでくださいSqlBulkCopy

于 2011-07-11T14:41:03.543 に答える
29

オブジェクトを入力しColumnMappingBulkCopyID 列をマップしません。ID 列は、ターゲット データベースによって生成されます。

于 2011-07-11T14:58:37.543 に答える
5

2 つのオプションがあります -

1 -KeepIdentityソースのIdentity値を使用して保持します。

Identity2 -フィールドをマップしません。値を割り当てようとしない場合は、ターゲット テーブルによって自動的に割り当てられます。

于 2011-07-11T14:43:04.240 に答える
1

はい、あなたは正しい SqlBulkCopyOptions.KeepIdentityオプションを使用しています.bulkcopyライターは、このオブジェクトが最初の列から書き込むテーブル構造が何であるかを考えていません.残りの必要な列を含むデータテーブル オブジェクトの余分な列を作成し、この列に null 値を渡すと、テーブルが自動的に ID を処理します。

于 2013-06-26T06:09:17.860 に答える
-1

私の場合、列名内の空白スペースであることが判明し、列の 1 つで、SQL テーブルでアンダースコア (_) の代わりにハイフォン (-) を誤って使用していました。SQLテーブルの空白とハイフォンをアンダースコアに置き換えて、問題を修正しました。

于 2016-01-20T15:49:07.910 に答える
-2

原因:- Excel のデータの末尾に空の行がいくつかありました。これは、空白行のように見える可能性があります。一括アップロードは、これらの空白行をテーブルにアップロードしようとしました。

解決策:- データを含む行のみを選択し、データを新しいシートにコピーします。「シート 1」にデータがあるとします。それを「シート 2」に移動し、「シート 1」を削除します。

于 2014-09-03T09:46:42.223 に答える