【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框架中,将视图中的数据传递到控制器中,主要通过发送 ...
随机推荐
- JVM 和 GC
一 堆与非堆 Java 虚拟机启动时创建一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. 在JVM中堆之外的内存称为非堆内存.. 简单来说堆就是Java代码可及的内存,是留给开发人员使 ...
- PAT B1048 数字加密 (20)
AC代码 #include <cstdio> #include <cstring> #include <algorithm> #include <iostre ...
- C#常见面试题(一)——try-catch-finally-return
面试常会被问及try-catch-finally,现在做一下总结: 第一.不管有没有出现异常,finally块中代码都会执行. 第二.finally 代码块中不能有return. 第三.如果try 或 ...
- 201803-3 URL映射
问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...
- Web项目测试流程总结
个人知识脑图总结 - 未完全(工作项目脑图总结存于网盘中)
- git、github常用操作
1.将github项目拷贝到本地 $ git clone https://github.com/jim2500/miaosha_project.git 2.修改本地项目上传到github T470s@ ...
- HTML5之客户端存储(Storage)
关于客户端存储技术 storage 一.关于客户端(浏览器)存储技术 浏览器的存储技术第一个能想到的应该就是cookie,关于cookie本身出现的初衷是为了解决客户端识别,可存储信息量小(4k左右) ...
- vue中使用proxy配置不同端口和ip接口
问题描述: 使用vue-cli创建的项目,开发地址是localhost:8080,由于后台开发不同的模块,导致每个模块请求的ip和端口号不一致 例如:http://192.168.10.22:8081 ...
- XSS防御和绕过2
上一篇已经总结过,这里转载一篇,备忘 0x01 常规插入及其绕过 转自https://blog.csdn.net/qq_29277155/article/details/51320064 1 Scri ...
- ubuntu系统新用户添加
大概是4个步骤吧,是用脚本实现的,这里我列一下关键点 sudo useradd -m userYouWantAdd sudo passwd userYouWantAdd sudo usermod -a ...