計算機類
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...