sqlbulkcopy提供了一種將資料複製到sql server資料庫表中高效能的方法。sqlbulkcopy 包含乙個方法 writetoserver,它用來從資料的源複製資料到資料的目的地。 writetoserver方法可以處理的資料型別有datarow陣列,datatable 和 datareader。 你可以根據不同的情形使用不同的資料型別。sqlbulkcopy其原理是採用了sql server的bcp協議進行資料的批量複製。
用法
1、將資料庫中的表複製到另乙個資料庫中的表。
本例將pubs資料庫的stores表中的資料複製到northwind資料庫的store表中。這兩個表結構相同。
using system.data;
using system.data.sqlclient;
using system.configuration;
/// /// 資料庫中的表複製到另乙個資料庫中的表
///
private void sqlbulkcopymethod()}}
}}
catch (exception ex)
}
2、將datatable中的資料批量插入到資料庫中。
using system.data;
using system.data.sqlclient;
using system.configuration;
/// /// 將表中資料批量插入到資料庫
/// **:
///
///
///
///
private void sqlbulkcopybydatatable(string connectionstring, string tablename, datatable dt)
sqlbulkcopy.writetoserver(dt);
}catch (system.exception ex)}}
}
在中看到下邊文章挺有用處,此處摘過來。原文:
1、從乙個表 複製資料到另乙個表
using system.data;
using system.data.sqlclient;
using system.configuration;
/// /// 從乙個表複製到別乙個表
///
private void performbulkcopy()
}reader.close();}}
public void bulkcopy_sqlrowscopied(object obj, sqlrowscopiedeventargs e)
注意:首先,我使用datareader來從資料庫的表中讀取資料。 products_latest是目的表,因為資料要從products_archive表複製到products_latest表。 bulkcopy物件提供了乙個sqlrowcopied事件,在每次處理完notifyafter屬性指定的行數時發生。 本例中的意思就是每處理完1000行就觸發一次該事件,因為notifyafter被設定成了1000。
batchsize屬性是非常重要的,程式效能如何主要就依靠著它。 batchsize的意思就是同每一批次中的行數,在每一批次結束時,就將該批次中的行傳送到資料庫。 我將batchsize設定成了500,其意思就是reader每讀出500行就將他們傳送到資料庫從而執行批量複製的操作。 batchsize的預設值是「1」,其意思就是把每一行作為乙個批次傳送到資料庫。設定不同的batchsize在效能上將給你帶來不同的結果。 你應該根據你的需求進行測試,來決定batchsize的大小。
2、在不同的對映表之間複製資料
上面的例子中兩個表具有相同的結構。 有時,你需要在具有不同結構的表之間複製資料。
/// /// 不同表之間複製資料
///
private static void performbulkcopydifferentschema()
}reader.close();
}}
3、從xml檔案複製資料到資料庫的表中
資料來源並不侷限於資料庫的表,你也可以使用xml檔案做資料來源。 這裡有乙個非常簡單的使用xml檔案做資料來源進行批量複製操作的例子。
<?xml version="1.0" encoding="utf-8" ?>
/// /// 使用xml作為資料來源
///
private static void performbulkcopyxmldatasource()
}}
首先把xml檔案讀進datatable,然後再使用sqlbulkcopy類的writetoserver方法。 因為目的表示是products_topselling,所以我們必須執行列對映。
SqlBulkCopy 批量插入
批量插入資料 public static void bulkcopy string pconnectstring,datatable dt,string tablename,int pbatchsize 10000 console.writeline string.format 插入條記錄共花費毫秒...
SQLBulkCopy使用 sql批量新增
sqlbulkcopy,用於資料庫之間大批量的資料傳遞。通常用於新,舊資料庫之間資料的更新。即使表結構完全不同,也可以通過欄位間的對應關係,順利的將資料導過來。首先,sqlbulkcopy需要2個連線。分別連線到不同的舊表所在的資料庫,新錶所在的資料庫。如果是同乙個資料庫,就可以用同乙個sqlcon...
批量插入資料 SqlBulkCopy類
最近要優化資料庫訪問,資料庫是sqlserver。對單條資料的插入和更新,之前的做法是先查詢資料庫是否有記錄,有就更新,沒有就插入。查了網上的資料後,別人有個好的做法是直接update,若受影響條數是0就直接插入。不知道有沒有更好的。對與操作歷史表的請求,準備做成批量插入。通過使用sqlbulkco...