這是一個效率最高的sql數(shù)據表轉sql語句的工具。
這兩天公司讓做一個導數(shù)據的功能,從Excel文件中將數(shù)據導出并插入到數(shù)據庫中,起初我是循環(huán)每一行數(shù)據,然后一條一條的將數(shù)據插入,這樣做雖然功能上 沒什么問題,但是如果數(shù)據量大的話,會很影響性能。于是在高人的指點下學習了SQLBulkCopy類,該類主要用于批量遷移數(shù)據到數(shù)據庫中,至于數(shù)據源 不加限制,只要數(shù)據可以加載到DataTable或是IDataReader,就可以利用該類批量導入。下面貼一個例子:
protected void butBulkCopy_OnClick(object sender, EventArgs e)
{
string ConStr = "database=TEST;uid=sa;pwd=sa;server=(local)";
//使用SqlBulkCopy把內存表DataTable里的數(shù)據插入答卷數(shù)據表
using (SqlBulkCopy bcp = new SqlBulkCopy(ConStr))
{
//指定目標數(shù)據庫的表名
bcp.DestinationTableName = "ARTICLE";
//建立數(shù)據源表字段和目標表中的列之間的映射
bcp.ColumnMappings.Add("T", "TITLE");
bcp.ColumnMappings.Add("C", "CONTENTS");
bcp.ColumnMappings.Add("D", "DATA");
//定義生成通知事件之前 要處理的行數(shù)
bcp.NotifyAfter = 1000;
//處理完要處理NotifyAfter的行數(shù)時觸發(fā)的事件
bcp.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(OnRowsCopied);
//寫入數(shù)據庫表
bcp.WriteToServer(dt);
//關閉SqlBulkCopy實例
bcp.Close();
}
}
private void OnRowsCopied(object sernder, SqlRowsCopiedEventArgs e)
{
Response.Write(e.RowsCopied.ToString());
}
DestinationTableName屬性定義了要復制表的目標名稱
ColumnMappings返回一個SqlBulkCopyColumnMapping項集 合,SqlBulkCopyColumnMappingCollection.Add 方法參數(shù)為數(shù)據源類名稱,目標表中目標列的名稱.也可以先定義一個SqlBulkCopyColumnMapping,然后使用Add方法添 加,SqlBulkCopyColumnMapping主要用于與目標數(shù)據表的表結構不一致的情況
NotifyAfter指定生成通知事件之前要處理的行數(shù),指定在每次處理行完成的時候發(fā)生的事件,比如每次復制了1000行以后就提示1000行復制完成
NorthWindBulkOp.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(OnRowsCopied);
最后WriteToServer方法,把SqlDataReader復制到指定的表中。
- PC官方版
- 安卓官方手機版
- IOS官方手機版