Exemple #1
0
        public override IDbCommand CreateInsertCommand(object entity)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(entity.GetType());
            bool identityIntegrated        = CheckIndentityIntegrated(mapping);

            List <FieldMapping> fields = new List <FieldMapping> ();

            fields.AddRange(mapping.GetFieldMappings());
            if (mapping.IdentityField != null)
            {
                fields.Remove(mapping.IdentityField);
            }
            List <DataParameter> paramList = GetDataParameters(fields, entity);
            StringBuilder        insert    = new StringBuilder();
            StringBuilder        values    = new StringBuilder();

            IDataParameter[] dataParameters = new IDataParameter[paramList.Count];
            int count = 0;

            foreach (DataParameter dataParameter in paramList)
            {
                IDataParameter param = _database.CreateParameter("P" + count, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                insert.AppendFormat("{0},", CreateDataFieldSql(dataParameter.ParameterName));
                values.AppendFormat("{0},", param.ParameterName);
                dataParameters [count] = param;
                count++;
            }
            insert.Remove(insert.Length - 1, 1);
            values.Remove(values.Length - 1, 1);
            StringBuilder sql = new StringBuilder();

            if (identityIntegrated)
            {
                sql.AppendFormat("insert into {0}({3},{1})values({4}.nextval,{2})", CreateDataTableSql(mapping.TableName), insert, values, CreateDataFieldSql(mapping.IdentityField.Name), GetIndentitySeq(mapping));
            }
            else
            {
                sql.AppendFormat("insert into {0}({1})values({2})", CreateDataTableSql(mapping.TableName), insert, values);
            }
            IDbCommand command = _database.CreateCommand(sql.ToString());

            command.CommandType = CommandType.Text;
            foreach (IDataParameter param in dataParameters)
            {
                command.Parameters.Add(param);
            }
            return(command);
        }
        /// <summary>
        /// 生成数据新增命令
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <returns>新增命令对象</returns>
        public virtual IDbCommand CreateInsertCommand(object entity)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(entity.GetType());
            List <FieldMapping>    fields  = new List <FieldMapping> ();

            fields.AddRange(mapping.GetFieldMappings());
            if (mapping.IdentityField != null)
            {
                fields.Remove(mapping.IdentityField);
            }
            List <DataParameter> paramList = GetDataParameters(fields, entity);
            StringBuilder        insert    = new StringBuilder();
            StringBuilder        values    = new StringBuilder();

            IDataParameter[] dataParameters = new IDataParameter[paramList.Count];
            int count = 0;

            foreach (DataParameter dataParameter in paramList)
            {
                IDataParameter param = _database.CreateParameter("P" + count, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                insert.AppendFormat("{0},", CreateDataFieldSql(dataParameter.ParameterName));
                values.AppendFormat("{0},", param.ParameterName);
                dataParameters [count] = param;
                count++;
            }
            insert.Remove(insert.Length - 1, 1);
            values.Remove(values.Length - 1, 1);
            StringBuilder sql = new StringBuilder();

            sql.AppendFormat("insert into {0}({1})values({2})", CreateDataTableSql(mapping.TableName), insert, values);
            //string identitysql = CreateIdentitySql(mapping);
            //if (!string.IsNullOrEmpty(identitysql))
            //{
            //    sql.AppendFormat(";{0}", identitysql);
            //}
            IDbCommand command = _database.CreateCommand(sql.ToString());

            command.CommandType = CommandType.Text;
            foreach (IDataParameter param in dataParameters)
            {
                command.Parameters.Add(param);
            }
            return(command);
        }
        public override IDbCommand[] CreateBulkInsertCommand(Array entitys, int batchCount)
        {
            if (entitys == null || entitys.Length == 0)
            {
                throw new ArgumentNullException("entitys");
            }
            if (batchCount <= 0)
            {
                batchCount = 10;
            }
            object tmpEntity = entitys.GetValue(0);
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(tmpEntity.GetType());
            List <FieldMapping>    fields  = new List <FieldMapping> ();
            int totalCount = entitys.Length;

            fields.AddRange(mapping.GetFieldMappings());
            if (mapping.IdentityField != null)
            {
                fields.Remove(mapping.IdentityField);
            }
            StringBuilder values = new StringBuilder();
            StringBuilder insert = new StringBuilder();


            List <DataParameter> paramList = GetDataParameters(fields, tmpEntity);

            foreach (DataParameter dataParameter in paramList)
            {
                insert.AppendFormat("{0},", CreateDataFieldSql(dataParameter.ParameterName));
            }
            insert.Remove(insert.Length - 1, 1);
            string insertsql = string.Format("insert into {0}({1})", CreateDataTableSql(mapping.TableName), insert);

            int createCount      = 0;
            int totalCreateCount = 0;

            IDbCommand        command    = _database.CreateCommand();
            int               paramCount = 0;
            List <IDbCommand> commands   = new List <IDbCommand> ();

            foreach (object entity in entitys)
            {
                paramList = GetDataParameters(fields, entity);
                StringBuilder value = new StringBuilder();
                foreach (DataParameter dataParameter in paramList)
                {
                    IDataParameter param = _database.CreateParameter("P" + paramCount, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                    value.AppendFormat("{0},", param.ParameterName);
                    command.Parameters.Add(param);
                    paramCount++;
                }
                value.Remove(value.Length - 1, 1);
                values.AppendFormat("({0}),", value);
                createCount++;
                totalCreateCount++;
                if (createCount == batchCount || totalCreateCount == totalCount)
                {
                    values.Remove(values.Length - 1, 1);
                    command.CommandText = string.Format("{0}values{1}", insertsql, values);
                    commands.Add(command);
                    if (totalCreateCount == totalCount)
                    {
                        break;
                    }
                    command     = _database.CreateCommand();
                    createCount = 0;
                    paramCount  = 0;
                    values      = new StringBuilder();
                }
            }
            return(commands.ToArray());
        }
        /// <summary>
        /// 生成数据更新命令
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <param name="updatefieldNames">需更新的数据字段</param>
        /// <returns>更新命令对象</returns>
        public virtual IDbCommand CreateUpdateCommand(object entity, string[] updatefieldNames)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(entity.GetType());

            if (mapping.PrimaryKeyFields == null || mapping.PrimaryKeyFields.Length == 0)
            {
                throw new LightDataException(RE.PrimaryKeyIsNotExist);
            }

            List <FieldMapping> fields = null;

            if (updatefieldNames != null && updatefieldNames.Length > 0)
            {
                List <FieldMapping> updateFields = new List <FieldMapping> ();
                foreach (string name in updatefieldNames)
                {
                    FieldMapping fm = mapping.FindFieldMapping(name);

                    if (fm != null && !updateFields.Contains(fm))
                    {
                        updateFields.Add(fm);
                    }
                }
                fields = updateFields;
            }

            if (fields == null)
            {
                fields = new List <FieldMapping> ();
                fields.AddRange(mapping.GetFieldMappings());
            }

            if (mapping.IdentityField != null)
            {
                fields.Remove(mapping.IdentityField);
            }
            foreach (DataFieldMapping primaryField in mapping.PrimaryKeyFields)
            {
                fields.Remove(primaryField);
            }

            List <DataParameter> columnList  = GetDataParameters(fields, entity);
            List <DataParameter> primaryList = GetDataParameters(mapping.PrimaryKeyFields, entity);

            if (columnList.Count == 0)
            {
                throw new LightDataException(RE.UpdateFieldIsNotExists);
            }
            StringBuilder update = new StringBuilder();

            StringBuilder where = new StringBuilder();
            IDataParameter[] dataParameters = new IDataParameter[columnList.Count + primaryList.Count];

            int count = 0;

            foreach (DataParameter dataParameter in columnList)
            {
                IDataParameter param = _database.CreateParameter("P" + count, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                update.AppendFormat("{0}={1},", CreateDataFieldSql(dataParameter.ParameterName), param.ParameterName);
                dataParameters [count] = param;
                count++;
            }
            foreach (DataParameter dataParameter in primaryList)
            {
                IDataParameter param = _database.CreateParameter("P" + count, dataParameter.Value, dataParameter.DbType, dataParameter.Direction);
                where.AppendFormat("{0}={1} and ", CreateDataFieldSql(dataParameter.ParameterName), param.ParameterName);
                dataParameters [count] = param;
                count++;
            }
            update.Remove(update.Length - 1, 1);
            where.Remove(where.Length - 5, 5);
            StringBuilder sql = new StringBuilder();

            sql.AppendFormat("update {0} set {1} where {2}", CreateDataTableSql(mapping.TableName), update, where);
            IDbCommand command = _database.CreateCommand(sql.ToString());

            command.CommandType = CommandType.Text;
            foreach (IDataParameter param in dataParameters)
            {
                command.Parameters.Add(param);
            }
            return(command);
        }