• SqlBulkCopy 帮助类


    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;

    namespace Common
    {
        public class BulkInsert
        {
            private string connectionString;


            public BulkInsert(string _con)
            {
                connectionString = ConfigurationManager.ConnectionStrings[_con].ConnectionString;
            }

            public BulkInsert(string _con, bool DESE)
            {
                connectionString = DESEncrypt.Decrypt(ConfigurationManager.ConnectionStrings[_con].ConnectionString);
            }


            public void WriteToServer<T>(List<T> list, string TableName)
            {

                using (SqlConnection destinationConnection = new SqlConnection(connectionString))
                {


                    DataTable dt = list.ToDataTable();

                    destinationConnection.Open();
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
                    {
                        bulkCopy.DestinationTableName = TableName;
                        bulkCopy.NotifyAfter = 30000;
                        try
                        {
                            bulkCopy.WriteToServer(dt);

                            Console.WriteLine("{0}插入{1}条数据", TableName, list.Count);
                        }
                        catch (Exception ex)
                        {
                            //Console.WriteLine(ex.Message);
                            throw ex;
                        }
                        finally
                        {

                        }
                    }
                }

            }

        }

        public static class DataTableHelper
        {

            public static DataTable ToDataTable<T>(this List<T> list)
            {

                //创建属性的集合   
                List<PropertyInfo> pList = new List<PropertyInfo>();
                //获得反射的入口   

                Type type = typeof(T);
                DataTable dt = new DataTable();

                //把所有的public属性加入到集合 并添加DataTable的列   
                Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
                foreach (var item in list)
                {
                    //创建一个DataRow实例   
                    DataRow row = dt.NewRow();
                    //给row 赋值   
                    pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
                    //加入到DataTable   
                    dt.Rows.Add(row);
                }
                return dt;
            }

            public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
            {
                return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
            }
        }
        public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
        {
            private Func<T, V> keySelector;

            public CommonEqualityComparer(Func<T, V> keySelector)
            {
                this.keySelector = keySelector;
            }

            public bool Equals(T x, T y)
            {
                return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
            }

            public int GetHashCode(T obj)
            {
                return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
            }
        }
    }

    代码改变世界
  • 相关阅读:
    bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
    bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
    bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
    c3p0 连接池配置
    Hibernate连接池断开自动重连
    Oracle ASM注意事项
    JAVA如何获得数据库的字段及字段类型
    在引入的css或者js文件后面加参数的作用
    JAVA注解
    Linux软连接和硬链接
  • 原文地址:https://www.cnblogs.com/oreobyzf/p/5933704.html
Copyright © 2020-2023  润新知