第一种方法:使用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)的更多相关文章

  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. 2019-07-31 C#基础知识学习

    什么是进程:进程是系统中正在运行的一个程序,程序一旦运行就是进程. 什么是线程:线程是进程的一个实体,是进程的一条执行路径. 进程和线程的区别体现在以下几个方面: 1.地址空间和其他资源(如打开文件) ...

  2. windows环境jar包部署到linux服务器,一键操作(帮助说明)

    背景:在上次https://www.cnblogs.com/shexunyu/p/11165282.html发布了第一个版本后,后面增加了相关功能 需求:做下简单的说明文档 下载:https://fi ...

  3. 洛谷 P4198 楼房重建 题解

    题面 首先你要知道题问的是什么:使用一种数据结构,动态地维护以1为起点地最长上升子序列(把楼房的高度转化成斜率地序列)的长度: 怎么做?线段树! 我们在线段树上维护两个东西:1.这个区间内斜率的最大值 ...

  4. 【NOIP2015普及组】 推销员(纪中数据-标准)

    题目 [题目描述] 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家住户,第 i 家住户到入口的距离为 ...

  5. Points Division(线段树+DP)2019牛客暑期多校训练营(第一场)

    题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点 ...

  6. php栈的定义和出栈、入栈的实现

    栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去就必须把上层的先拿开才行. 定义:栈是 ...

  7. Tensorflow安装错误Cannot uninstall wrapt

    解决办法:安装之前先执行:pip install wrapt --ignore-installed

  8. Codeforces 1240B. Sequence Sorting

    传送门 分析题目发现如果把某个数 $x$ 往左移,那么之后所有小于 $x$ 的数也都要往左移 如果把 $x$ 往右移,那么之后所有大于 $x$ 的数也都要往右移 考虑我们首先一定有一个操作 $n$ 次 ...

  9. 基于JWT的token身份认证方案(转)

    https://www.cnblogs.com/xiangkejin/archive/2018/05/08/9011119.html 一.使用JSON Web Token的好处? 1.性能问题. JW ...

  10. JS和JS是IE上JavaScript或JScript的缩写。

    JS和JS是IE上JavaScript或JScript的缩写.javascript是所有浏览器的开放式标准脚本语言JScript是微软自己的开放式脚本语言标准,只有微软的IE浏览器遵循.JScript ...