《DataTable数据批量写入数据库三种方法比较》由会员分享,可在线阅读,更多相关《DataTable数据批量写入数据库三种方法比较(3页珍藏版)》请在人人文库网上搜索。
1、DataTable 数据批量写入数据库三种方法比较 以及方法介绍 收藏 最近在将 excel 中的文件导入到数据库中, 用程序进行编写, 由于数据量较大所以速度很慢, 后 来 采 用 了 SqlBulkCopy 类 , 解 决 了 速 度 的 问 题 , 我 就 insert 语 句,sqldataadapter.update(dataset,table name);sqlbulkcopy.WriteToServer(datatable);三个方法的性 能进行比较:1、生成测试的 datatable 表,表结构如下:UniqueID( 主键,自动增长 ) | CompanyName | Com。
2、panyCode | 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 = d。
3、ataset.Tables0;/ 生成 20000 条记录for (int i = 0; i 20000; i+)DataRow datarow = datatable.NewRow(); datarowCompanyName = companyname+string.Format(0:0000,i); datarowCompanyCode = companycode + string.Format(0:0000, i); datarowAddress = address + string.Format(0:0000, i); datarowOwner = owner + string.For。
4、mat(0:0000, i); datarowMemo = memo + string.Format(0:0000, i);datatable.Rows.Add(datarow);2、使用 sqlcommand.executenonquery()方法插入foreach (DataRow datarow in datatable.Rows)string sql = INSERT INTO Table_1(CompanyName,CompanyCode,Address,Owner,Memo) +VALUES( + datarowCompanyName.ToString() + +, + datar。
5、owCompanyCode.ToString() + +, + datarowAddress.ToString() + +, + datarowOwner.ToString() + +, + datarowMemo.ToString() + );using (SqlConnection sqlconn = new SqlConnection(connectionString) sqlconn.Open();SqlCommand sqlcommand = new SqlCommand(sql, sqlconn); sqlcommand.ExecuteNonQuery();sqlconn.Clos。
6、e();插入 20000 条记录时间 :00:00:29.73360003、使用 sqldataadapter.update(dataset,tablename);SqlCommand insertcommand = new SqlCommand(INSERT INTO Table_1(CompanyName,CompanyCode,Address,Owner,Memo) +V ALUES(CompanyName,CompanyCode,Address,Owner,Memo),newSqlConnection(connectionString);insertcommand.Parameters。
7、.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, S。
8、qlDbType.NChar, 255, Memo); sqldataadapter.InsertCommand = insertcommand;sqldataadapter.Update(dataset, Table_1);插入 20000 条记录时间 :00:00:22.89380004、使用 sqlbulkcopy.writetoserver(datatable)SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);sqlbulkcopy。
9、.DestinationTableName = Table_1;/ 数据库中的表名sqlbulkcopy.WriteToServer(dataset.Tables0);插入 20000 条记录时间 :00:00:00.3276000所以说速度是 sqlbulkcopy 最快,sqldataadapter.update(次之,sqlcommand.ExecuteNonQuery() 最慢。本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 http:/blog.csdn.net/humozhi/archive/2009/03/31/4039868.aspx 1.大批量数据操作可以利。
10、用 SqlBulkCopy 类快速写入大批量数据,针对 SQL Server 的优化,可以写入 DataRow 数据, DataTable,DataReaderWriteToServer ( DataTable)写入数据表WriteToServer( DataRow )批次写入数据行WriteToServer ( DataTable , DataRowState)按行状态写入数据库表WriteToServer (IDataReader)写入 DataReader 对象string connstr = server=(local);database=northwind;integrated se。
11、curity=true;async=true;/ Fill up a DataSetDataSet ds = new DataSet();SqlConnection conn = new SqlConnection(connstr);SqlDataAdapter dadp = new SqlDataAdapter(select * from customers, conn); dadp.Fill(ds);/ Copy the Data to SqlServerSqlBulkCopy bcp = new SqlBulkCopy(connstr);bcp.DestinationTableName 。
12、= customers1; bcp.WriteToServer(ds.Tables0);2.多个动态的结果集Multiple Active Result Sets ( MARS )这个只能在 SQL Server 2005 中使用可以在一个 Command 对象上同时打开多个 DataReaderstring connstr = server=(local);database=northwind;integrated security=true;async=true;SqlConnection conn = new SqlConnection(connstr);conn.Open();SqlC。
13、ommand cmd1 = new SqlCommand(select * from customers, conn);SqlCommand cmd2 = new SqlCommand(select * from orders, conn);SqlDataReader rdr1 = cmd1.ExecuteReader();/ next statement causes an error prior to SQL Server 2005SqlDataReader rdr2 = cmd2.ExecuteReader();/ now you can reader from rdr1 and rdr2 at the same time。