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