好用的大量新增SqlBulkCopy

2013年11月12日 星期二

最近工作上遇到的問題

公司有用ga分析,每天都需要把資料抓取下來,由於早期同事寫的語法為

一筆一筆的insert into,效率實在是不太好,現在有更好用的SqlBulkCopy可以用了,請參考以下範例。

 //一開始我們先產生一個DataTable來裝我們要寫入的資料 
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));

//因為SqlBulkCopy的猛就是大量的一次寫入,所以我們也來跑10萬筆吧
int i;
for (i = 0; i < 100000; i++)
{
DataRow dr = dt.NewRow();
dr["name"] = i.ToString();
dt.Rows.Add(dr);
}

//宣告連結字串
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString);

conn.Open();
//宣告SqlBulkCopy
using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
{
//設定一個批次量寫入多少筆資料
sqlBC.BatchSize = 1000;
//設定逾時的秒數
sqlBC.BulkCopyTimeout = 60;

//設定 NotifyAfter 屬性,以便在每複製 10000 個資料列至資料表後,呼叫事件處理常式。
sqlBC.NotifyAfter = 10000;
sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);

//設定要寫入的資料庫
sqlBC.DestinationTableName = "dbo.Table1";

//對應資料行
sqlBC.ColumnMappings.Add("id", "id");
sqlBC.ColumnMappings.Add("name", "name");

//開始寫入
sqlBC.WriteToServer(dt);
}
conn.Dispose();


 



參考資料:



http://king971119.blogspot.tw/2010/12/c-sqlbulkcopy.html



http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx

0 意見: