DataTable数据批量写入数据库三种方法比较

1)   insert循环插入;
2)   sqldataadapter.update(dataset,tablename);
3)   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],
)" +
"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],
)" +
"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)
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()最慢。

DataTable 数据批量写入数据库三种方法比较的更多相关文章

  1. DataTable数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename); ...

  2. 批量插入数据, 将DataTable里的数据批量写入数据库的方法

    大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql ...

  3. 【转】asp.net导出数据到Excel的三种方法

    来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/ ...

  4. DataTable的数据批量写入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

  5. Oracle DataTable的数据批量写入数据库

    insert语句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.WriteToServer(datatable);三个方法的性能进行比较: ...

  6. DataTable转换为Json字符串的三种方法

    //第一种:使用StringBuilder  public string DataTableToJson(DataTable table) { var JsonString = new StringB ...

  7. Java连接MySQL数据库三种方法

    好久没有更新博客了!今天利用周目时学习了一下数据库mysql.介绍一下数据库的三种连接方式! 开发工具:Myeclipse MySQL5.6 MySQL连接驱动:mysql-connector-jav ...

  8. .net MVC 连接数据本地数据库三种方法

    <appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add ...

  9. 使用客户端软件向服务端php程序发送post数据,php接受三种方法

    方法一:$_POST; 方法二:$GLOBALS['HTTP_RAW_POST_DATA'],需要在php.ini开启 always_populate_raw_post_data = On: 方法三: ...

随机推荐

  1. ECMAScript基本语法——⑤运算符 算数运算符

    +-*/%

  2. java 日期累加,如何求一年后日期,一月后日期,一周后日期和一天后日期

    import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...

  3. swagger2使用

    添加依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swag ...

  4. nginx中部署前端,后端打成jar包运行

    项目是前后端分离:前端用vue开发,后端用的是springboot开发 会产生跨域问题,故在前端里用了代理 1.本前端项目是用vue开发: 1.1打包:终端 vscode快捷键:crtl+~  然后n ...

  5. 第一次个人编程作业&#183;寒假

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy ...

  6. 三、linux环境的搭建1(oracle、ssh、jdk、mysql、samba、tomcat)

    linux环境的搭建1(oracle.ssh.jdk.mysql.samba.tomcat)   网络配置 方案一 tip 1 使用ifconfig : ifconfig eth0 新ip 然后编辑/ ...

  7. 为QT应用程序添加图标 转

    第1,第2种方法经本人验证可行 1:通过qmake生成makefile实现过程: (1) 找到一张图片.ico,名字改为myappico.ico: (2) 创建一个新的文本文档,内部添加  IDI_I ...

  8. ORA-01476: 除数为 0

    假设是a/bdecode(b,0,null,a/b) 这样如果b为0,输出null,不为0输出a/b decode():将查询结果翻译成其他值,类似三目运算符 比较1个参数时      decode( ...

  9. html中特殊符号对应表

    html中特殊符号的对应表 符号 说明 编码 ‘'  双引号  "  &  and符  &  <  小于号  <  >  大于号  >    空格   ...

  10. java简单学生成绩管理系统

    题目要求: 一. 数据结构要求:(5 分) 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishi ...