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 映射列名是敏感大小写的!

  • 相关阅读:
    一些端口
    outlook 的微软手册
    目录摘要
    L2TP的包过滤规则
    outlook 的外出时助理程序对外部邮箱不起作用。1个解决办法和另外一个可能性
    用editplus 正则表达式修改联系人表
    Cisco NAT的理解。
    outlook 2003 无法记住密码
    ERD commander 2005的下载地址。
    outlook 2003启用日志记录排除故障。
  • 原文地址:https://www.cnblogs.com/jicheng/p/6186286.html
Copyright © 2011-2022 走看看