最近要迁移数据,一个老版本的数据迁移到新版本的数据库中,字段、配置、参数什么的完全不一样。
纠结啊,写代码估计只花了1/5的时间,对字段参数这些简直是惨不忍睹啊。。。还算比较清楚结构的我,都已经无语了。
最后遇到SqlBulkCopy各种问题
以前封装好的方法只有单独一个表添加,调用了几次方法,经常出现此 SqlTransaction 已完成;它再也无法使用。
好吧,我改。。。
using (SqlTransaction st = conn.BeginTransaction())
{
using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, st))
{
copy.DestinationTableName = TableName;
copy.WriteToServer(Table);
}
N个。。。。
}
多表一起提交,然后又导致超时,哎。。。完全跑不了。。。再改吧,把数据比较大的那张表,分开提交
using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, st))
{
copy.BulkCopyTimeout = 120;
copy.BatchSize = 100;
copy.NotifyAfter = 100;
copy.SqlRowsCopied += new SqlRowsCopiedEventHandler((object sender, SqlRowsCopiedEventArgs e) =>
{
Console.WriteLine("完成100行");
});
copy.DestinationTableName = 大表.TableName;
copy.WriteToServer(大表);
}
其实吧,这个表也就不到4千万数据,按理说不应该这么吧,可能是我们服务器太差了,也可能是索引太多了,他们给出的复杂查询,完全不考虑性能的,只为了写程序方便简单,最后就坑的就是哥们了。。