C 批量高效率匯入大資料到資料庫 百萬級以上

2022-07-24 03:33:11 字數 2956 閱讀 8392

將幾百萬條資料匯入到資料庫中,怎麼樣高效率的匯入?

下面我就介紹乙個高效率的方法:

1、將資料庫檔案(db.csv)匯入到datatable中:

///

/// 將csv檔案的資料讀取到datatable中

///

/// csv檔案路徑

/// 返回讀取了csv資料的datatable

public static datatable opencsv(string filepath)

encoding encoding = encoding.getencoding("utf-8");

datatable dt = new datatable();

filestream fs = new filestream(filepath, system.io.filemode.open, system.io.fileaccess.read);

//streamreader sr = new streamreader(fs, encoding.utf8);

streamreader sr = new streamreader(fs, encoding);

//string filecontent = sr.readtoend();

//encoding = sr.currentencoding;

//記錄每次讀取的一行記錄

string strline = "";

//記錄每行記錄中的各欄位內容

string aryline = null;

string tablehead = null;

//標示列數

int columncount = 0;

//標示是否是讀取的第一行

bool isfirst = true;

//逐行讀取csv中的資料

while ((strline = sr.readline()) != null)

//strline = common.convertstringutf8(strline, encoding);

//strline = common.convertstringutf8(strline);

if (isfirst == true)

tablehead = strline.split(',');

isfirst = false;

columncount = tablehead.length;

//建立列

for (int i = 0; i < columncount; i++)

datacolumn dc = new datacolumn(tablehead[i]);

dt.columns.add(dc);

else

if (!string.isnullorempty(strline))

aryline = strline.split(',');

datarow dr = dt.newrow();

for (int j = 0; j < columncount; j++)

dr[j] = aryline[j];

dt.rows.add(dr);

if (aryline != null && aryline.length > 0)

dt.defaultview.sort = tablehead[0] + " " + "asc";

sr.close();

fs.close();

return dt;

2、將資料庫儲存到資料庫:

public static void tablevaluedtodb(datatable dt)

sqlconnection sqlconn = new sqlconnection(

configurationmanager.connectionstrings["defaultconnection"].connectionstring);

const string tsqlstatement =

"insert into table (col1,col2)" +

" select nc.col1,nc.col2" +

" from @newbulktesttvp as nc";

sqlcommand cmd = new sqlcommand(tsqlstatement, sqlconn);

sqlparameter catparam = cmd.parameters.addwithvalue("@newbulktesttvp", dt);

catparam.sqldbtype = sqldbtype.structured;

//錶值引數的名字叫bulkudt,在上面的建立測試環境的sql中有。

catparam.typename = "dbo.bulkudt";

trysqlconn.open();

if (dt != null && dt.rows.count != 0)

cmd.executenonquery();

catch (exception ex)

throw ex;

finally

sqlconn.close();

3、在資料庫建立錶值引數型別:

create type dbo.bulkudt(col1 bigint,col2 nvarchar(10));

4、開始匯入資料:

stopwatch sw = new stopwatch();

string filepath = @"c:\db.csv";

datatable dt = csvfilehelper.opencsv(filepath);

sw.start();

tablevaluedtodb(dt);

sw.stop();

trace.writeline(string.format("elapsed time is milliseconds", sw.elapsedmilliseconds));

各資料庫高效率分頁

db2 1.建立索引 create index 索引名 on 表名 排序用的列名 asc 2.更新統計資訊 runstats on table 模式名.表名 with distribution and on all columns and detailed index 模式名.索引 3.優化sql ...

高效率批量插入上億資料

轉至 create table create table tmp test chas lee f01 varchar2 20 f02 number 10 not null,f03 varchar2 21 f04 varchar2 21 f05 number,f06 number 20 建立乙個臨時表...

C 批量匯入資料到資料庫 bulk insert

在我們開發過程中,有時會遇到百萬級別甚至更多的資料匯入。比如我們需要將一百萬條資料從csv檔案匯入到資料庫中,此時,如果我們使用普通的 insert 語句執行,會非常影響效率,因為每插入一條資料,資料庫都需要完整的走一遍 日誌啦等等流程。使用bulk insert 會幫助我們提高效率。var voc...