第一种方法:使用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. JVM 和 GC

    一 堆与非堆 Java 虚拟机启动时创建一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. 在JVM中堆之外的内存称为非堆内存.. 简单来说堆就是Java代码可及的内存,是留给开发人员使 ...

  2. PAT B1048 数字加密 (20)

    AC代码 #include <cstdio> #include <cstring> #include <algorithm> #include <iostre ...

  3. C#常见面试题(一)——try-catch-finally-return

    面试常会被问及try-catch-finally,现在做一下总结: 第一.不管有没有出现异常,finally块中代码都会执行. 第二.finally 代码块中不能有return. 第三.如果try 或 ...

  4. 201803-3 URL映射

    问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...

  5. Web项目测试流程总结

    个人知识脑图总结 - 未完全(工作项目脑图总结存于网盘中)

  6. git、github常用操作

    1.将github项目拷贝到本地 $ git clone https://github.com/jim2500/miaosha_project.git 2.修改本地项目上传到github T470s@ ...

  7. HTML5之客户端存储(Storage)

    关于客户端存储技术 storage 一.关于客户端(浏览器)存储技术 浏览器的存储技术第一个能想到的应该就是cookie,关于cookie本身出现的初衷是为了解决客户端识别,可存储信息量小(4k左右) ...

  8. vue中使用proxy配置不同端口和ip接口

    问题描述: 使用vue-cli创建的项目,开发地址是localhost:8080,由于后台开发不同的模块,导致每个模块请求的ip和端口号不一致 例如:http://192.168.10.22:8081 ...

  9. XSS防御和绕过2

    上一篇已经总结过,这里转载一篇,备忘 0x01 常规插入及其绕过 转自https://blog.csdn.net/qq_29277155/article/details/51320064 1 Scri ...

  10. ubuntu系统新用户添加

    大概是4个步骤吧,是用脚本实现的,这里我列一下关键点 sudo useradd -m userYouWantAdd sudo passwd userYouWantAdd sudo usermod -a ...