【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)
第一种方法:使用SqlCommand.EcecuteNonQurery() 效率最慢
第二种方法:使用SqlDataAdapter.Update(DataTable) 效率次之
第三种方法:使用SqlBulkCopy.WriteToServer(Datatable) 效率最快
- static void Main(string[] args)
- {
- string connString = "SERVER=.;DATABASE=Test;UID=sa;PWD=F123456789f";
- //生成DataTable表
- DataTable dt = new DataTable();
- dt.Columns.Add("CompanyCode");
- dt.Columns.Add("CompanyName");
- dt.Columns.Add("Address");
- dt.Columns.Add("Owner");
- dt.Columns.Add("Memo");
- for (int i = ; i < ; i++)
- {
- DataRow row = dt.NewRow();
- row["CompanyName"] = "companyname" + string.Format("{0:00000}", i);
- row["CompanyCode"] = "companycode" + string.Format("{0:00000}", i);
- row["Address"] = "address" + string.Format("{0:00000}", i);
- row["Owner"] = "owner" + string.Format("{0:00000}", i);
- row["Memo"] = "memo" + string.Format("{0:00000}", i);
- dt.Rows.Add(row);
- }
- //第一种方法:使用SqlCommand.EcecuteNonQurery()方法插入
- foreach (DataRow row in dt.Rows)
- {
- string sql = "insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values("
- + "'" + row["CompanyName"].ToString() + "'" + ","
- + "'" + row["CompanyCode"].ToString() + "'" + ","
- + "'" + row["Address"].ToString() + "'" + ","
- + "'" + row["Owner"].ToString() + "'" + ","
- + "'" + row["Memo"].ToString() + "'" + ")";
- using (SqlConnection sqlcon = new SqlConnection(connString))
- {
- sqlcon.Open();
- SqlCommand sqlcmd = new SqlCommand(sql, sqlcon);
- sqlcmd.ExecuteNonQuery(); sqlcon.Close();
- }
- }
- //第二种方法:使用SqlDataAdapter.Update(DataTable)
- SqlCommand insertcmd = new SqlCommand("insert into Mytable(CompanyName,CompanyCode,Address,Owner,Memo) values(@CompanyName,@CompanyCode,@Address,@Owner,@Memo)", new SqlConnection(connString));
- insertcmd.Parameters.Add("@CompanyName", SqlDbType.NChar, , "CompanyName");
- insertcmd.Parameters.Add("@CompanyCode", SqlDbType.NChar, , "CompanyCode");
- insertcmd.Parameters.Add("@Address", SqlDbType.NChar, , "Address");
- insertcmd.Parameters.Add("@Owner", SqlDbType.NChar, , "Owner");
- insertcmd.Parameters.Add("@Memo", SqlDbType.NChar, , "Memo");
- SqlDataAdapter sqlda = new SqlDataAdapter();
- sqlda.InsertCommand = insertcmd;
- sqlda.Update(dt);
- //第三种方法:使用SqlBulkCopy.WriteToServer(Datatable)
- SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connString, SqlBulkCopyOptions.UseInternalTransaction);
- sqlbulkcopy.DestinationTableName = "Mytable"; //目标表,即数据要插入到哪个表去
- sqlbulkcopy.ColumnMappings.Add("CompanyName","CompanyName"); //数据源列名与目标表的属性的映射关系 数据源是DataTable,目标表即数据库表
- sqlbulkcopy.ColumnMappings.Add("CompanyCode", "CompanyCode");
- sqlbulkcopy.ColumnMappings.Add("Address", "Address");
- sqlbulkcopy.ColumnMappings.Add("Memo", "Memo");
- sqlbulkcopy.ColumnMappings.Add("Owner", "Owner");
- sqlbulkcopy.WriteToServer(dt); //数据源数据写入目标表
- }
【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)的更多相关文章
- C# Entity Framework 更新数据的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- 【EF】EntityFramework 更新数据库字段的三种方法
实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...
- EntityFramework 更新数据库字段的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- DataTable 数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 1) insert循环插入: 2) sqldataadapter.update(dataset,tablename); 3) sqlbul ...
- 去除DataTable重复数据的三种方法
业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库. 其中要避 ...
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- Mybatis+Mysql插入数据库返回自增主键id值的三种方法
一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...
- ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...
随机推荐
- Oracle-DQL 3- 单行函数
单行函数: --使用函数对表中的数据进行运算和处理,针对每行数据返回一个结果,叫做单行函数--包括数字函数,字符函数,日期函数,转换函数,其他函数 1.数字函数 --round(m,n) 将数字m精确 ...
- hbase与hdfs的交互
hdfs和hbase的交互,和写MapReduce程序类似,只是需要修改输入输出数据和使用hbase的javaAPI对其进行操作处理即可 public class HBaseToHdfs extend ...
- spark教程(19)-sparkSQL 性能优化之谓词下推
在 sql 语言中,where 表示的是过滤,这部分语句被 sql 层解析后,在数据库内部以谓词的形式出现: 在 sparkSQL 中,如果出现 where,它会现在数据库层面进行过滤,一般数据库会有 ...
- Open-falcon监控
https://book.open-falcon.org/zh_0_2/ 本文档记录了CentOS7.4下open-falcon-v2监控系统的部署流程,以及一些需要注意的地方. 环境准备 安装Red ...
- 史上最全的MySQL高性能优化实战总结!
1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多 ...
- CentOS 中利用docker安装MySQL
1.前提条件 centos7 且内核版本高于3.10, 可通过命令: uname -r 查看内核版本 2.利用yum 安装docker 安装一些必要的系统工具: sudo yum install -y ...
- 基于C#开发的扩展按钮控件
最近在准备一套自定义控件开发的课程,下面将第一个做的按钮控件分享给大家. 其实这个控件属于自定义控件中的扩展控件,与组合控件和GDI+开发的控件不同,这个控件是继承原生的Button, 这个控件的目的 ...
- apply()和call()的方法
apply()和call()的方法的区别 参考文档https://www.cnblogs.com/lengyuehuahun/p/5643625.html 一直都没太明白apply()与call()的 ...
- 2.OR Mapping 介绍
定义: ORM(Object Relational Mapping) -- 是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术. 简单说:ORM是通过使用描述对象和数据库之间的映射的元数据 ...
- How to mount remote Windows shares
Contents Required packages Basic method Better Method Even-better method Yet Another Even-better m ...