DataTable批量插入資料庫 效能對比

2021-05-23 04:28:52 字數 2390 閱讀 9568

計算機類

2010-03-19 09:27:39

閱讀345

字型大小:大

最近在將excel中的檔案匯入到資料庫中,用程式進行編寫,由於資料量較大所以速度很慢,後來採用了sqlbulkcopy類,解決了速度的問題,我就insert語句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.writetoserver(datatable);三個方法的效能進行比較:

1、生成測試的datatable表,表結構如下:

uniqueid(主鍵,自動增長) | companyname | companycode | address | owner | memo

共6個字段。

sqlconnection sqlconnection = new sqlconnection(connectionstring);

sqldataadapter sqldataadapter = new sqldataadapter("select * from table_1 where 1=2", sqlconnection);

dataset dataset = new dataset();

sqldataadapter.fill(dataset, "table_1");

datatable datatable = dataset.tables[0];

//生成20000條記錄

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

",i);

datarow["companycode"] = "companycode" + string.format("", i);

datarow["address"] = "address" + string.format("", i);

datarow["owner"] = "owner" + string.format("", i);

datarow["memo"] = "memo" + string.format("", i);

datatable.rows.add(datarow);

}2、使用sqlcommand.executenonquery()方法插入

foreach (datarow datarow in datatable.rows)

}3、使用sqldataadapter.update(dataset,tablename);

sqlcommand insertcommand = new sqlcommand("insert into [table_1]([companyname],[companycode],[address],[owner],[memo])" +

"values(@companyname, @companycode,@address,@owner,@memo)",new sqlconnection(connectionstring));

insertcommand.parameters.add("@companyname", sqldbtype.nchar, 50, "companyname");

insertcommand.parameters.add("@companycode", sqldbtype.nchar, 25, "companycode");

insertcommand.parameters.add("@address", sqldbtype.nchar, 255, "address");

insertcommand.parameters.add("@owner", sqldbtype.nchar, 25, "owner");

insertcommand.parameters.add("@memo", sqldbtype.nchar, 255, "memo");

sqldataadapter.insertcommand = insertcommand;

sqldataadapter.update(dataset, "table_1"); 

4、使用sqlbulkcopy.writetoserver(datatable)(日白得很說:這種方法只有sql-server和oracle 11g以後的版本才可以使用...現在我用的是10g...殘念...)

sqlbulkcopy sqlbulkcopy = new sqlbulkcopy(connectionstring, sqlbulkcopyoptions.useinternaltransaction);

sqlbulkcopy.destinationtablename = "table_1";//資料庫中的表名

sqlbulkcopy.writetoserver(dataset.tables[0]);

所以說速度是sqlbulkcopy最快,sqldataadapter.update()次之,sqlcommand.executenonquery()最慢。

DataTable批量插入資料庫

最近在將excel中的檔案匯入到資料庫中,用程式進行編寫,由於資料量較大所以速度很慢,後來採用了sqlbulkcopy類,解決了速度的問題,我就insert語句,sqldataadapter.update dataset,tablename sqlbulkcopy.writetoserver dat...

DataTable批量插入資料庫

最近在將excel中的檔案匯入到資料庫中,用程式進行編寫,由於資料量較大所以速度很慢,後來採用了sqlbulkcopy類,解決了速度的問題,我就insert語句,sqldataadapter.update dataset,tablename sqlbulkcopy.writetoserver dat...

批量插入資料

drop procedure if exists pre 如果存在先刪除 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i int default 12 declare n int de...