zoukankan      html  css  js  c++  java
  • C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List<T> Or DataTable)

         /*_____________________ 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 data)
                {
                    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();
                }
            }

    补充:SqlBulkCopy ColumnMappings 映射列名是敏感大小写的!

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/jicheng/p/6186286.html
Copyright © 2011-2022 走看看