BulkInsert批量新增数据记录

          
   DataTable table = new DataTable();
   mdTable mdTable = new mdTable();
  //根据model构建table
   table = DbBulkExtend.GetModelProperty(mdTable);
   //调用批量插入

   DbBulkExtend.BulkInsert<userVM>(addUserList, table, "SYS_USER");
           /// <summary>  
        /// 批量插入  
        /// </summary>  
        /// <typeparam name="T">泛型集合的类型</typeparam>  
        /// <param name="list">要插入大泛型集合</param> 
        /// <param name="table">内存dt</param> 
        /// <param name="tableName">对应数据库的表名</param> 
        public static void BulkInsert<T>(IList<T> list, DataTable table, string tableName)
        {
            var connStr = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

            SqlConnection conn = new SqlConnection(connStr);

            using (var bulkCopy = new SqlBulkCopy(conn))
            {
                conn.Open();
                bulkCopy.BatchSize = list.Count;
                bulkCopy.DestinationTableName = tableName;

                var props = TypeDescriptor.GetProperties(typeof(T))
                                    .Cast<PropertyDescriptor>()
                                    .ToArray();
                var values = new object[props.Length];
                foreach (var item in list)
                {
                    for (var i = 0; i < values.Length; i++)
                    {
                        values[i] = props[i].GetValue(item);
                    }
                    table.Rows.Add(values);
                }
                bulkCopy.WriteToServer(table);
                conn.Close();
            }
        }

        /// <summary>
        /// 构建内存dt列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        public static DataTable GetModelProperty<T>(T model)
        {
            DataTable table = new DataTable();
            //取得m的Type实例  
            Type t = model.GetType();
           
            //取得类的属性名并获取属性值  
            foreach (System.Reflection.PropertyInfo s in t.GetProperties()) //循环遍历  
            {
                Type pType = s.PropertyType;
                table.Columns.Add(s.Name, pType);
            }
            return table;
        }

        /// <summary>
        /// 获取表名
        /// </summary>
        /// <param name="typeInfo"></param>
        /// <returns></returns>
        public static string GetTableName(Type typeInfo)
        {
            var os = typeInfo.GetCustomAttributes(false);
            var displayName = ((TableAttribute[])typeInfo.GetCustomAttributes(typeof(TableAttribute), false)).FirstOrDefault();
            if (displayName != null && displayName.Name.Length > 0)
            {
                return displayName.Name;
            }
            else
            {
                return "";
            }
        }
原文地址:https://www.cnblogs.com/nayilvyangguang/p/9981548.html