我使用SqlBulkCopy
将大量数据插入SQL Server。代码很简单,如下所示:
using (var copy = new SqlBulkCopy(connection))
{
copy.BatchSize = 10000;
copy.DestinationTableName = "MyTableName";
// other parameters...
copy.WriteToServer(reader);
}
我遇到的问题是数据量很大,因此完成复制操作需要很长时间。有时网络或SQL Server中会出现暂时性错误,这会导致WriteToServer
调用失败。
在这些情况下,我希望能够从失败的批处理中继续复制,而不是从一开始就重新删除所有数据并重复复制。但是我无法做到这一点,因为当我抓住WriteToServer
引发的异常时,reader
对象本来就处于错误的位置。
我能想到的一个解决方案是在代码中缓存整个批处理。但这意味着我需要管理缓存的内存。我也相信这种方法会对性能造成很大影响。
还有更好的方法吗?感谢。