Esempio n. 1
0
        /// <summary>
        /// 将实体集合中的所有数据导入数据库,如果数据已经存在则修改(先删除再插入)否则直接插入。如果实体中的数据只包含部分字段的数据,请勿使用该方法。
        /// </summary>
        /// <param name="entityList">同一实体类集合</param>
        /// <param name="bulkCopyModel">是否使用批量插入的方式更新,只支持SQLSERVER。
        /// 取值含义:0,不使用批量复制,1,批量复制前删除数据库中对应的重复记录,2,不检查重复,直接批量插入
        /// </param>
        /// <returns>操作受影响的行数</returns>
        public int ImportData(List <EntityBase> entityList, int bulkCopyModel)
        {
            int count = 0;

            if (entityList == null || entityList.Count == 0)
            {
                return(0);
            }

            AdoHelper db = DefaultNewDataBase;

#if (CMD_FAST)
            //如果是SQLSERVER,考虑批量复制的方式
            if (bulkCopyModel > 0 && db is SqlServer)
            {
                if (bulkCopyModel == 1)
                {
                    //将目标数据库中对应的数据删除
                    db.BeginTransaction();
                    try
                    {
                        count = DeleteDataInner(entityList, db);
                        db.Commit();
                    }
                    catch (Exception ex)
                    {
                        db.Rollback();
                        throw ex;
                    }
                }

                //执行大批量复制
                DataTable source = EntitysToDataTable <EntityBase>(entityList);
                SqlServer.BulkCopy(source, db.ConnectionString, source.TableName, 500);
                return(entityList.Count);
            }
            else
            {
                db.BeginTransaction();
                try
                {
                    count = ImportDataInner(entityList, db);
                    db.Commit();
                }
                catch (Exception ex)
                {
                    db.Rollback();
                    throw ex;
                }
            }
#else
            db.BeginTransaction();
            try
            {
                count = ImportDataInner(entityList, db);
                db.Commit();
            }
            catch (Exception ex)
            {
                db.Rollback();
                throw ex;
            }
#endif
            return(count);
        }