:所以这是一个愚蠢的错误,有点尴尬。我在下面的行中正确设置了值:
copier.NotifyAfter = data.Rows.Count;
我在这里留下这篇文章是为了提醒其他人,有时候,你只需要往下看几行就知道你在重写你试图做的事情。希望有人看到这个会想:“啊哈!明白了。哎呀。”
如果有人比我拥有更多的mod权限想要锁定它,或者认为它没有增加任何价值并想删除它,这对我是有效的。
同时,哎呀。:)
SqlBulkCopy
. 为此,我有一个方法,它接受一个数据表(其中有500000行),并设置两者
BatchSize
和
NotifyAfter
SqlRowsCopied
事件。
问题是,它不起作用。不管我做什么,我都不能打印出一条以上的信息。我知道
有效,因为如果我设置得很低,我可以看到行进入,但我不能让事件触发多次。有人知道我做错了什么吗?
方法:
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);
}
}
输出
第1批完成。
最后,我可以在数据库中看到500000行。我只是不能让输出符合
财产。