【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框架中,将视图中的数据传递到控制器中,主要通过发送 ...
随机推荐
- c++学习笔记之类模板
C++ 除了支持函数模板,还支持类模板(Class Template).函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中.类模板的目的同样是将数据的 ...
- tp5支付宝和微信支付
一.生成二维码给用户进行扫码支付 1.先在vendor目录下加入支付宝和微信支付的引用 2.付款处调用 /** * 订单支付接口 * * @api {post} {:url('order/pay')} ...
- linux环境下Python搭建
安装gcc yum install gcc 安装zlib yum -y install zlib* 安装openssl-devel yum install openssl-devel -y ...
- python内置函数0-1
# a=bool(None)# print(a) class Foo: def __repr__(self): return 'bbbbbbb'f = Foo()ret = ascii(f)print ...
- peewee无外键连接
# 参考:https://blog.csdn.net/weixin_34273479/article/details/87587183 res = Name.select(Name, User.xxx ...
- Wannafly挑战赛24
A. 石子游戏 Alice和Bob在玩游戏,他们面前有n堆石子,对于这些石子他们可以轮流进行一些操作,不能进行下去的人则输掉这局游戏.可以进行两种操作:1. 把石子数为奇数的一堆石子分为两堆正整数个石 ...
- redis 学习(18)-- AOF
redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中. 日志记录的实质是将写命令写在硬盘的缓冲区中,再根据相关策略把数据刷新到磁盘中. 当redi ...
- JS基础_while的练习2
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- luogu P4688 [Ynoi2016]掉进兔子洞
luogu 我们要求的答案应该是三个区间长度\(-3*\)在三个区间中都出现过的数个数 先考虑数列中没有相同的数怎么做,那就是对三个区间求交,然后交集大小就是要求的那个个数.现在有相同的数,考虑给区间 ...
- day10 mysql常用操作
一. 目录 1.mysql的简介 2.增删改查操作 3.单表查询 4.多表查询常见的三种方式 5.pymysql模块操作数据库 二. 内容 一.mysql的简介 概述:mysql是一个关系型数据库, ...