zoukankan      html  css  js  c++  java
  • SqlBulkCopy批量插入

            public DBResult BatchInsert<T>(string tableName, List<T> entities) where T : class
            {
                if(entities == null || string.IsNullOrEmpty(tableName))
                {
                    return DBResult.ExecuteErr;
                }
    
                DataTable dt = new DataTable();
    
                DBResult dbRst = CreateTable(tableName, ref dt);
    
                if(dbRst != DBResult.Success)
                {
                    return DBResult.ExecuteErr;
                }
    
                dbRst = ListToDataTable<T>(entities, ref dt);
    
                if (dbRst != DBResult.Success)
                {
                    return DBResult.ExecuteErr;
                }
    
                return BatchInsertData<T>(tableName, dt);
            }
    
            public DBResult BatchInsertData<T>(string tableName, DataTable dtData) where T : class
            {
                ConnectionManager manager = GetConnection();
                if (manager == null)
                {
                    return DBResult.ExecuteErr;
                }
    
                SqlTransaction MyTrans = null;
                SqlBulkCopy BulkCopyElectron = null;
                try
                {
                    manager.OpenDb();
                    SqlConnection conn = manager.MyConnection;
                    MyTrans = manager.MyConnection.BeginTransaction();
    
                    if (MyTrans == null)
                    {
                        return DBResult.NullObject;
                    }
    
                    if (dtData.Rows.Count > 0)
                    {
                        //批量增加数据
                        BulkCopyElectron = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, MyTrans);
                        BulkCopyElectron.DestinationTableName = tableName;
    
                        //提交到数据库
                        BulkCopyElectron.WriteToServer(dtData);
                    }
    
                    MyTrans.Commit();
                    return DBResult.Success;
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
    
                    if (MyTrans != null)
                    {
                        MyTrans.Rollback();
                    }
                    return DBResult.ExecuteErr;
                }
                finally
                {
                    if (BulkCopyElectron != null)
                    {
                        BulkCopyElectron.Close();
                    }
                    ReleaseConnection(ref manager);
                }
            }
    
            public DBResult CreateTable(string tableName, ref DataTable dt)
            {
                if (dt == null)
                {
                    return DBResult.ExecuteErr;
                }
    
                ConnectionManager manager = GetConnection();
    
                try
                {
                    manager.OpenDb();
                    SqlCommand cmd = manager.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = string.Format("SELECT * FROM {0} WHERE 1 <> 1", tableName);
                    dt = GetTable(cmd);
    
                    if (dt == null || dt.Columns.Count == 0)
                    {
                        return DBResult.ExecuteErr;
                    }
    
                    return DBResult.Success;
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                    return DBResult.ExecuteErr;
                }
                finally
                {
                    ReleaseConnection(ref manager);
                }
            }
    
            public DBResult ListToDataTable<T>(List<T> entities, ref DataTable dt)
            {
                //检查实体集合不能为空
                if (entities == null || entities.Count == 0)
                {
                    return DBResult.ExecuteErr;
                }
    
                try
                {
                    DataColumnCollection dc = dt.Columns;
    
                    //取出第一个实体的所有Propertie
                    Type entityType = entities[0].GetType();
                    System.Reflection.PropertyInfo[] entityProperties = entityType.GetProperties();
    
                    //将所有entity添加到DataTable中
                    foreach (T entity in entities)
                    {
                        DataRow dr = dt.NewRow();
    
                        for (int i = 0; i < entityProperties.Length; i++)
                        {
                            if (dc.Contains(entityProperties[i].Name))
                            {
                                dr[entityProperties[i].Name] = entityProperties[i].GetValue(entity, null);
                            }
                        }
                        dt.Rows.Add(dr);
                    }
    
                    return DBResult.Success;
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                    return DBResult.ExecuteErr;
                }
            }
    

      

    岁月无情催人老,请珍爱生命,远离代码!!!
  • 相关阅读:
    2019/1/17 break语句小练习
    2019/1/17goto语句小试牛刀
    python 中* 和**的作用
    python 元组编码和解码问题
    python SMTP 发送邮件
    python 自定义异常
    python websocket client 使用
    excel、xls文件读写操作
    windows10局域网实现文件共享
    django入门
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/15540587.html
Copyright © 2011-2022 走看看