最近要遷移數據,一個老版本的數據遷移到新版本的數據庫中,字段、配置、參數什麼的完全不一樣。
糾結啊,寫代碼估計只花了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千萬數據,按理說不應該這麼吧,可能是我們服務器太差了,也可能是索引太多了,他們給出的複雜查詢,完全不考慮性能的,只爲了寫程序方便簡單,最後就坑的就是哥們了。。