最近在将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++)
{
          DataRow datarow = datatable.NewRow();
          datarow["CompanyName"] = "companyname"+string.Format("{0:0000}",i);
          datarow["CompanyCode"] = "companycode" + string.Format("{0:0000}", i);
          datarow["Address"] = "address" + string.Format("{0:0000}", i);
          datarow["Owner"] = "owner" + string.Format("{0:0000}", i);
          datarow["Memo"] = "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('" + datarow["CompanyName"].ToString() + "'" +
",'" + datarow["CompanyCode"].ToString() + "'" +
",'" + datarow["Address"].ToString() + "'" +
",'" + datarow["Owner"].ToString() + "'" +
",'" + datarow["Memo"].ToString() + "')";
using (SqlConnection sqlconn = new SqlConnection(connectionString))
{
      sqlconn.Open();

SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);
      sqlcommand.ExecuteNonQuery();
      sqlconn.Close();
}
}

插入20000条记录时间:00:00:29.7336000

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");

插入20000条记录时间:00:00:22.8938000

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]);

插入20000条记录时间:00:00:00.3276000

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

转载于:https://www.cnblogs.com/starxp/articles/2832952.html

转帖DataTable批量插入数据库相关推荐

  1. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  2. sql server 使用SqlBulkCopy批量插入数据库

    sql server sqlbulkcopy 批量数据插入数据库使用的是System.Data.SqlClient中的 SqlBulkCopy批量数据插入数据库 sql server 使用SqlBul ...

  3. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch

    //addBatch批量插入数据库 public static void insertCommentToMySql(Set commentList) { Iterator it = commentLi ...

  4. MYSQL批量插入数据库实现语句性能分析

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( ...

  5. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下: CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCH ...

  6. 大量数据批量插入数据库

    大量数据批量插入数据库 前言 工作时遇到了大量数据需要插入到数据库的情况,一条条的插入速度慢效率低下,不能满足需求,为了解决此问题采用了sql中使用foreach,并在service中设置批量来进行批 ...

  7. 转:Mybatis与JDBC批量插入数据库哪个更快

    转自 http://www.cnblogs.com/fnz0/p/5713102.html, https://www.cnblogs.com/wxw7blog/p/8706797.html [转]: ...

  8. 记一次批量插入数据库脚本练习

    批量插入数据库脚本 1.建表 dept表 emp表 2.设置参数log_bin_trust_function_creators 3.创建函数,保证每条数据不同 mysql自定义函数 一.基本语法 二. ...

  9. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

最新文章

  1. R语言进行数据聚合统计(Aggregating transforms)计算滑动窗口统计值(Window Statistics):使用R原生方法、data.table、dplyr等方案、计算滑动分组统计
  2. 浙大超重力离心模拟与实验装置有望年底开建 释放五大利好
  3. php1为true,php有一个预定义的常量true,值为整数1,这该如何理解?
  4. 【机器学习基础】朴素贝叶斯的算法实现
  5. wx.createInnerAudioContext seek方法执行后,监听事件onTimeUpdate无效?
  6. 分享php中四种webservice实现的简单架构方法及实例(转)
  7. Android之简单背景颜色渐变实现
  8. java long的包,long longValue()
  9. 如何生成一副Poker
  10. linux 配置路由时via,详解Linux系统中配置静态路由的方法
  11. 【java】输出素数
  12. android交叉编译工具链,NDK 交叉编译工具链使用
  13. 用友NC总账辅助余额表与应收应付模块余额表对账技巧
  14. java 批量发送邮件_spring boot实现异步批量发送邮件
  15. 车架号OCR识别算法
  16. [转载] 无法解密!首个利用WinRAR漏洞传播的未知勒索软件(JNEC)分析
  17. Phalcon整合beanstalk消息队列
  18. C::Mat取出指定区域的方法
  19. 安徽农业大学计算机信息管理专业,刘连忠 - 安徽农业大学 - 信息与计算机学院...
  20. 大数据开发:大数据背景下的数据库选型

热门文章

  1. [导入]关于怎样通过xslt向.NET扩展函数传递OuterXml属性
  2. 实践篇:利用函数计算轻松构建全文检索系统
  3. appium-java长按学习
  4. 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行
  5. Android OpenCV Manager简介
  6. AlertDialog.Builder setCancelable用法
  7. ubuntu下磁道坏区的检测与修复
  8. PHP CURL 图灵机器人
  9. 黑马vue---8-10、v-cloak、v-text、v-html、v-bind、v-on的基本使用
  10. No identifier specified for entity