【发布时间】:2013-12-29 12:52:24
【问题描述】:
我不知道为什么 SqlBulkCopy 不插入来自阅读器的所有记录。代码:
using (OleDbDataReader dr1 = cmd.ExecuteReader())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ss, SqlBulkCopyOptions.TableLock, null))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = 500;
bulkCopy.DestinationTableName = tableName;
try
{
bulkCopy.WriteToServer(dr1);
}
catch (Exception ex)
{
Log.LogSystemLog(ex.ToString());
return false;
}
}
GC.Collect();
dr1.Close();
}
我想批量复制大约 30 万条记录。当我从本地主机运行它到同一个数据库时它可以工作,但是当我从服务器运行它时 - 它总是插入〜7k记录......并且没有错误或异常。服务器上有 4GB 可用 RAM。在本地主机上 ~ 1,5GB。
我不知道为什么它在本地主机上正常工作,但在服务器上却不行。
【问题讨论】:
-
SqlBulkCopy 没有问题。也许您的日志记录已损坏,或者您错过了日志消息。取下锁扣,让错误冒泡。不要使用布尔返回值来传播错误。这导致不容易注意到它们。或者,您的阅读器返回的行数比您认为的要少。
-
但是为什么在我调试时(在本地主机上)相同的代码可以正常工作?
-
可能是数据不同、批次超时或网络中断。我们永远不会发现您是否不能 100% 确定自己会出错(如果有的话,这很可能)。在你做到之前,没有人能帮助你。如果没有错误消息,您将不会收到有用的答案。
标签: asp.net sql .net database sqlbulkcopy