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;
                }
            }
    

      

    岁月无情催人老,请珍爱生命,远离代码!!!
  • 相关阅读:
    在Java当中如何优雅地处理临时文件
    lombok插件不建议使用的原因
    linux系统下修改tomcat的端口号时,需要修改的地方
    linux系统下报错为:直接在tomcat的bin目录下生成一个错误文件。
    Linux下修改tomcat端口号
    python实现断点续传下载文件
    Python中下划线---完全解读
    linux  指令 备注
    Linux下高并发socket最大连接数所受的各种限制
    python和pywin32实现窗口查找、遍历和点击
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/15540587.html
Copyright © 2011-2022 走看看