C# 利用 SqlBulkCopy 提交

最近要遷移數據,一個老版本的數據遷移到新版本的數據庫中,字段、配置、參數什麼的完全不一樣。

糾結啊,寫代碼估計只花了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千萬數據,按理說不應該這麼吧,可能是我們服務器太差了,也可能是索引太多了,他們給出的複雜查詢,完全不考慮性能的,只爲了寫程序方便簡單,最後就坑的就是哥們了。。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章