zoukankan      html  css  js  c++  java
  • SQL SERVER 多数据导入

     public bool CreateTB_PROPERTY_MODELLByList(List<TB_PROPERTY_MODEL> entity)
            {
                try
                {
                   
                    //将集合转换成DataTable
                    DataTable dtTable = Untity.ListToDataTable(entity);
    
                    var sqlConn = (SqlConnection)_dbContext.Database.Connection; ;
                    sqlConn.Open();
                    using (SqlTransaction transaction = sqlConn.BeginTransaction())
                    {
                        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.Default, transaction))
                        {
                            bulkCopy.BatchSize = 10000;//多少条数据提交一次
                            bulkCopy.BulkCopyTimeout = 600;//时间设置
                            bulkCopy.DestinationTableName = "TB_PROPERTY_MODEL"; //表名 
                            try
                            {
    //这里列一定要和数据库中的表的列要一样.和数据类型也一样。不然无法导入
    foreach (DataColumn col in dtTable.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.WriteToServer(dtTable); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); LogHelper.Error(ex.Message); throw ex.InnerException; } finally { bulkCopy.Close(); sqlConn.Close(); } } } return true; } catch (SqlException ex) { LogHelper.Error(ex.Message); throw ex.InnerException; } catch (DbException ex) { LogHelper.Error(ex.Message); throw ex.InnerException; } }
            /// <summary>
            /// List转换成Table
            /// </summary>
            /// <typeparam name="T">数据实体</typeparam>
            /// <param name="entitys">要转换的List</param>
            /// <returns>DataTable</returns>
            public static DataTable ListToDataTable<T>(List<T> entitys)
            {
                var dt = new DataTable();
                //检查实体集合不能为空
                if (entitys == null || entitys.Count < 1)
                {
                    return dt;
                    throw new Exception("需转换的集合为空");
                }
                //取出第一个实体的所有Propertie
                Type entityType = entitys[0].GetType();
                PropertyInfo[] entityProperties = entityType.GetProperties();
                //生成DataTable的structure
                //生产代码中,应将生成的DataTable结构Cache起来,此处略
    
                foreach (PropertyInfo t in entityProperties)
                {
                    //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
                    dt.Columns.Add(t.Name);
                }
                //将所有entity添加到DataTable中
                foreach (object entity in entitys)
                {
                    //检查所有的的实体都为同一类型
                    if (entity.GetType() != entityType)
                    {
                        throw new Exception("要转换的集合元素类型不一致");
                    }
                    var entityValues = new object[entityProperties.Length];
                    for (int i = 0; i < entityProperties.Length; i++)
                    {
                        entityValues[i] = entityProperties[i].GetValue(entity, null);
                    }
                    dt.Rows.Add(entityValues);
                }
                return dt;
            }

    之前用的是EF的数据写入。感觉EF在写入的时候有点慢,可能是自己没有找到EF正确的方法。

  • 相关阅读:
    Android之Handler实现延迟执行
    static{}语句块
    (转)git常见错误
    smarty使用
    git简易操作
    angular路由——ui.route
    angular服务二
    angular服务一
    angualr 实现tab选项卡功能
    EF 集合版 状态版的 增加、删除、修改 的实践
  • 原文地址:https://www.cnblogs.com/w2011/p/4613130.html
Copyright © 2011-2022 走看看