第一种方法:使用SqlCommand.EcecuteNonQurery()  效率最慢

第二种方法:使用SqlDataAdapter.Update(DataTable)   效率次之

第三种方法:使用SqlBulkCopy.WriteToServer(Datatable)  效率最快

  1. static void Main(string[] args)
  2. {
  3. string connString = "SERVER=.;DATABASE=Test;UID=sa;PWD=F123456789f";
  4.  
  5. //生成DataTable表
  6. DataTable dt = new DataTable();
  7. dt.Columns.Add("CompanyCode");
  8. dt.Columns.Add("CompanyName");
  9. dt.Columns.Add("Address");
  10. dt.Columns.Add("Owner");
  11. dt.Columns.Add("Memo");
  12. for (int i = ; i < ; i++)
  13. {
  14. DataRow row = dt.NewRow();
  15. row["CompanyName"] = "companyname" + string.Format("{0:00000}", i);
  16. row["CompanyCode"] = "companycode" + string.Format("{0:00000}", i);
  17. row["Address"] = "address" + string.Format("{0:00000}", i);
  18. row["Owner"] = "owner" + string.Format("{0:00000}", i);
  19. row["Memo"] = "memo" + string.Format("{0:00000}", i);
  20. dt.Rows.Add(row);
  21. }
  22.  
  23. //第一种方法:使用SqlCommand.EcecuteNonQurery()方法插入
  24. foreach (DataRow row in dt.Rows)
  25. {
  26. string sql = "insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values("
  27. + "'" + row["CompanyName"].ToString() + "'" + ","
  28. + "'" + row["CompanyCode"].ToString() + "'" + ","
  29. + "'" + row["Address"].ToString() + "'" + ","
  30. + "'" + row["Owner"].ToString() + "'" + ","
  31. + "'" + row["Memo"].ToString() + "'" + ")";
  32. using (SqlConnection sqlcon = new SqlConnection(connString))
  33. {
  34. sqlcon.Open();
  35. SqlCommand sqlcmd = new SqlCommand(sql, sqlcon);
  36. sqlcmd.ExecuteNonQuery(); sqlcon.Close();
  37. }
  38.  
  39. }
  40.  
  41. //第二种方法:使用SqlDataAdapter.Update(DataTable)
  42. SqlCommand insertcmd = new SqlCommand("insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values(@CompanyName,@CompanyCode,@Address,@Owner,@Memo)", new SqlConnection(connString));
  43. insertcmd.Parameters.Add("@CompanyName", SqlDbType.NChar, , "CompanyName");
  44. insertcmd.Parameters.Add("@CompanyCode", SqlDbType.NChar, , "CompanyCode");
  45. insertcmd.Parameters.Add("@Address", SqlDbType.NChar, , "Address");
  46. insertcmd.Parameters.Add("@Owner", SqlDbType.NChar, , "Owner");
  47. insertcmd.Parameters.Add("@Memo", SqlDbType.NChar, , "Memo");
  48. SqlDataAdapter sqlda = new SqlDataAdapter();
  49. sqlda.InsertCommand = insertcmd;
  50. sqlda.Update(dt);
  51.  
  52. //第三种方法:使用SqlBulkCopy.WriteToServer(Datatable)
  53. SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connString, SqlBulkCopyOptions.UseInternalTransaction);
  54. sqlbulkcopy.DestinationTableName = "Mytable"; //目标表,即数据要插入到哪个表去
  55. sqlbulkcopy.ColumnMappings.Add("CompanyName","CompanyName"); //数据源列名与目标表的属性的映射关系 数据源是DataTable,目标表即数据库表
  56. sqlbulkcopy.ColumnMappings.Add("CompanyCode", "CompanyCode");
  57. sqlbulkcopy.ColumnMappings.Add("Address", "Address");
  58. sqlbulkcopy.ColumnMappings.Add("Memo", "Memo");
  59. sqlbulkcopy.ColumnMappings.Add("Owner", "Owner");
  60. sqlbulkcopy.WriteToServer(dt); //数据源数据写入目标表
  61.  
  62. }

【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)的更多相关文章

  1. C# Entity Framework 更新数据的三种方法

    例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...

  2. 【EF】EntityFramework 更新数据库字段的三种方法

    实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...

  3. EntityFramework 更新数据库字段的三种方法

    例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...

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

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

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

    DataTable数据批量写入数据库三种方法比较 1)   insert循环插入: 2)   sqldataadapter.update(dataset,tablename); 3)   sqlbul ...

  6. 去除DataTable重复数据的三种方法

    业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库. 其中要避 ...

  7. 去除DataTable重复数据的三种方法(转)

    转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...

  8. Mybatis+Mysql插入数据库返回自增主键id值的三种方法

    一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...

  9. ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

    http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...

随机推荐

  1. c++学习笔记之类模板

    C++ 除了支持函数模板,还支持类模板(Class Template).函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中.类模板的目的同样是将数据的 ...

  2. tp5支付宝和微信支付

    一.生成二维码给用户进行扫码支付 1.先在vendor目录下加入支付宝和微信支付的引用 2.付款处调用 /** * 订单支付接口 * * @api {post} {:url('order/pay')} ...

  3. linux环境下Python搭建

    安装gcc   yum install gcc 安装zlib   yum -y install zlib* 安装openssl-devel   yum install openssl-devel -y ...

  4. python内置函数0-1

    # a=bool(None)# print(a) class Foo: def __repr__(self): return 'bbbbbbb'f = Foo()ret = ascii(f)print ...

  5. peewee无外键连接

    # 参考:https://blog.csdn.net/weixin_34273479/article/details/87587183 res = Name.select(Name, User.xxx ...

  6. Wannafly挑战赛24

    A. 石子游戏 Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏.可以进行两种操作:1. 把石子数为奇数的一堆石子分为两堆正整数个石 ...

  7. redis 学习(18)-- AOF

    redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中. 日志记录的实质是将写命令写在硬盘的缓冲区中,再根据相关策略把数据刷新到磁盘中. 当redi ...

  8. JS基础_while的练习2

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. luogu P4688 [Ynoi2016]掉进兔子洞

    luogu 我们要求的答案应该是三个区间长度\(-3*\)在三个区间中都出现过的数个数 先考虑数列中没有相同的数怎么做,那就是对三个区间求交,然后交集大小就是要求的那个个数.现在有相同的数,考虑给区间 ...

  10. day10 mysql常用操作

    一. 目录 1.mysql的简介 2.增删改查操作 3.单表查询 4.多表查询常见的三种方式 5.pymysql模块操作数据库 二. 内容 一.mysql的简介  概述:mysql是一个关系型数据库, ...