/*_____________________ List<T>类型数据 To Sql_______________________________*/

   /// <summary>
        /// Sqlbulkcopies the specified SMS.批量插入到数据库
        /// </summary>
        /// <param name="data">list类型数据.</param>
        /// <param name="sqlconn">数据库连接字符串.</param>
        private void Sqlbulkcopy(List<T> data, SqlConnection sqlconn)
        {
            #region 待处理数据初始化处理
            List<PropertyInfo> pList = new List<PropertyInfo>();//创建属性的集合
            DataTable dt = new DataTable();
            //把所有的public属性加入到集合 并添加DataTable的列    
            Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });  //获得反射的入口(typeof()) //要对 array 的每个元素执行的 System.Action。
            foreach (var item in sms)
            {
                DataRow row = dt.NewRow(); //创建一个DataRow实例  
                pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //给row 赋值
                dt.Rows.Add(row); //加入到DataTable    
            }
            #endregion
            #region 批量插入数据库 SqlBulkCopy声明及参数设置
            SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "TableName" /*设置数据库目标表名称*/, BatchSize = dt.Rows.Count /*每一批次中的行数*/ };
           bulk.ColumnMappings.Add("ID", "ID"); //设置数据源中的列和目标表中的列之间的映射关系
            bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源数据表列名称", "目标表数据列名称");
            bulk.ColumnMappings.Add("sex", "sex");
            bulk.ColumnMappings.Add("phone", "phone");  

    .

    .

    .
            #endregion
            bulk.WriteToServer(dt);
            if (bulk != null)
            {
                bulk.Close();
            }
        }

  /*_____________________ DataTable类型数据 To Sql_______________________________*/

     /// <summary>
        /// Sqlbulkcopies the specified SMS.批量插入到数据库
        /// </summary>
        /// <param name="dt">DataTable类型带插入数据</param>
        /// <param name="sqlconn">数据库连接字符串</param>
        private void Sqlbulkcopy(DataTable dt, SqlConnection sqlconn)
        {
            #region 批量插入数据库 SqlBulkCopy声明及参数设置
           
SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(),
SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName =
"ENG_FailSendSMS" /*设置数据库目标表名称*/, BatchSize = dt.Rows.Count /*每一批次中的行数*/
};
            bulk.ColumnMappings.Add("ID", "ID"); //设置数据源中的列和目标表中的列之间的映射关系
            bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源数据表列名称", "目标表数据列名称");
            bulk.ColumnMappings.Add("sex", "sex");
            bulk.ColumnMappings.Add("phone", "phone");  

    .

    .

    .
          
            #endregion
            bulk.WriteToServer(dt);
            if (bulk != null)
            {
                bulk.Close();
            }
        }

C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List<T> Or DataTable)的更多相关文章

  1. C#中几种数据库的大数据批量插入

    C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...

  2. C#:几种数据库的大数据批量插入

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  3. C#:几种数据库的大数据批量插入(转)

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  4. C#:几种数据库的大数据批量插入 - faib

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  5. c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...

  6. PHP如何将多维数组中的数据批量插入数据库?

    PHP将多维数组中的数据批量插入到数据库中,顾名思义,需要用循环来插入. 1.循环insert into 语句,逐渐查询 <?php /* www.qSyz.net */ @mysql_conn ...

  7. 使用事务操作SQLite数据批量插入,提高数据批量写入速度,源码讲解

    SQLite数据库作为一般单机版软件的数据库,是非常优秀的,我目前单机版的软件产品线基本上全部替换Access作为优选的数据库了,在开发过程中,有时候需要批量写入数据的情况,发现传统的插入数据模式非常 ...

  8. C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据

    #region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// ...

  9. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

随机推荐

  1. Xcode8+和iOS10+使用Masonry自动计算行高

    说起tableView的自动计算行高,真的是不想再提了,写了不知道几百遍了.可就是这麽一个小玩意儿,把我给难的不行不行的,眼看都要没头发了. 1.设置tableView的预估行高和行高为自动计算 // ...

  2. 初试WIX加SQL LocalDB

    最近有个项目需要生成一个自动打包安装App和数据库的MSI文件,经同事推荐WIX,于是乎就试了一试.遇到了一些问题觉得有分享的价值,所以写篇博客记录一下 :) 使用感觉: WIX特点:功能很强大,用X ...

  3. Dapper.NET——轻量ORM

    Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...

  4. yii2 RESTful api的详细使用

    作者:白狼 出处:http://www.manks.top/yii2-restful-api.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  5. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  6. JAVA编程思想(第四版)学习笔记----11.4 容器的打印

    import static java.lang.System.out; import java.util.ArrayList; import java.util.Collection; import ...

  7. SQL Server读写分离实现方案简介

    读写分离是中型规模应用的数据库系统常见设计方案,通过将数据从主服务器同步到其他从服务器,提供非实时的查询功能,扩展性能并提高并发性. 数据库的读写分离的好处如下: 通过将“读”操作和“写”操作分离到不 ...

  8. USB Host的上拉下拉电阻

      关于USB的上下拉电阻,不是随便接个任意阻值的电阻就ok了. 当你的USB为主设备的时候,D+.D-上分别接一个15K的下拉电阻,这样可以使得在没有设备插入的时候,D+.D-上始终保持低电平:当为 ...

  9. Java基础知识笔记(八:集合类)

    目录 1  集合类简介  2  List介绍及简单使用 2.1  LinkedList介绍及简单使用 2.2  ArrayList介绍及简单使用 2.3  Vector介绍及简单使用 2.3.1  S ...

  10. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...