SqlBulkCopy NotifyAfterを尊重しない

c# sqlbulkcopy

質問

アップデート :これは間違ったやりかたで、やや恥ずかしいものでした。値を正しく設定していたところで、次の行がありました。

copier.NotifyAfter = data.Rows.Count;

だから私は自分の価値を上書きしていて、うまくいきませんでした。

私はこの記事を他の人に思い出させるためにここに残しておきます。時には、あなたがしようとしていることを上書きしていることを確認するために、うまくいけば、誰かがこれを見て、 "ああ、ええ、それを持っている。"

私よりも力強いパワーを持つ人がこれをロックしたいと思う、あるいは価値がないと思って、それを取り除こうと思っている人は、私のために働きます。

その間に、おっと! :)


私はSqlBulkCopyバッチ処理のサポートを説明しようとしています(デモ用)。これを行うには、データテーブル(500,000行あり)をNotifyAfterし、 BatchSizeNotifyAfter両方を100,000に設定し、 SqlRowsCopiedイベントが発生するたびに印刷するSqlRowsCopiedます。

問題は、動作しないということです。私が何をしても、複数のメッセージを印刷することはできません。私はBatchSize動作を知ってBatchSizeます。なぜなら、非常に低い値に設定すると、入ってくる行を見ることができますが、イベントを複数回BatchSizeすることはできません。誰でも私が間違っていることを知っている?

メソッド:

public void InsertInBatches(SqlConnection connection, DataTable data)
{
    int currentBatch = 1;

    Console.WriteLine($"{data.Rows.Count.ToString("N0")} rows, {data.Rows.Count / 100000} batches");
    using (var copier = new SqlBulkCopy(connection))
    {
        copier.NotifyAfter = 100000;
        copier.BatchSize = 100000;
        copier.SqlRowsCopied += (s, e) => Console.WriteLine($"Batch {currentBatch++} complete.");
        copier.DestinationTableName = "dbo.BulkInsertPerformance";
        MapBulkCopyColumns(copier, data);
        copier.NotifyAfter = data.Rows.Count;
        copier.WriteToServer(data);
    }
}

出力

500,000行、5バッチ

バッチ1が完了しました。

何かキーを押すと続行します。

終わりまでに、私はデータベースに500,000行を見ることができます。私は出力をNotifyAfterプロパティを尊重することができません。

受け入れられた回答

削除する

copier.NotifyAfter = data.Rows.Count;

public void InsertInBatches(SqlConnection connection, DataTable data)
{
    int currentBatch = 1;

    Console.WriteLine($"{data.Rows.Count.ToString("N0")} rows, {data.Rows.Count / 100000} batches");
    using (var copier = new SqlBulkCopy(connection))
    {
        copier.NotifyAfter = 100000;
        copier.BatchSize = 100000;
        copier.SqlRowsCopied += (s, e) => Console.WriteLine($"Batch {currentBatch++} complete.");
        copier.DestinationTableName = "dbo.BulkInsertPerformance";
        MapBulkCopyColumns(copier, data);
        copier.WriteToServer(data);
    }
}


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