SqlBulkCopy 批量複製 使用方法

2021-06-18 21:53:43 字數 2587 閱讀 6583

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...