Example #1
0
        /// <summary>
        /// 生成数据删除命令
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <returns>删除命令对象</returns>
        public virtual IDbCommand CreateDeleteCommand(object entity)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(entity.GetType());

            if (mapping.PrimaryKeyFields == null || mapping.PrimaryKeyFields.Length == 0)
            {
                throw new LightDataException(RE.PrimaryKeyIsNotExist);
            }
            List <DataParameter> primaryList = GetDataParameters(mapping.PrimaryKeyFields, entity);

            StringBuilder where = new StringBuilder();
            IDataParameter[] dataParameters = new IDataParameter[primaryList.Count];
            int count = 0;

            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++;
            }
            where.Remove(where.Length - 5, 5);
            StringBuilder sql = new StringBuilder();

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

            command.CommandType = CommandType.Text;
            foreach (IDataParameter param in dataParameters)
            {
                command.Parameters.Add(param);
            }
            return(command);
        }
Example #2
0
        /// <summary>
        /// 从主键获取数据对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="primaryKeys">主键数组</param>
        /// <returns>数据对象</returns>
        public T SelectSingleFromKey <T>(params object[] primaryKeys)
            where T : class, new()
        {
            DataTableEntityMapping dtmapping = DataMapping.GetTableMapping(typeof(T));

            if (primaryKeys.Length != dtmapping.PrimaryKeyFields.Length)
            {
                throw new LightDataException(RE.TheNumberOfPrimaryKeysIsNotMatch);
            }
            DataFieldInfo[] primaryKeyInfos = new DataFieldInfo[primaryKeys.Length];
            QueryExpression query           = null;

            for (int i = 0; i < primaryKeys.Length; i++)
            {
                primaryKeyInfos[i] = new DataFieldInfo(dtmapping.PrimaryKeyFields[i]);
                if (i == 0)
                {
                    query = primaryKeyInfos[i] == primaryKeys[i];
                }
                else
                {
                    query = query & primaryKeyInfos[i] == primaryKeys[i];
                }
            }
            return(SelectSingle(dtmapping, query, null, 0, SafeLevel.None) as T);
        }
Example #3
0
        /// <summary>
        /// 创建新对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <returns>数据对象</returns>
        public T CreateNew <T>()
            where T : class, new()
        {
            DataTableEntityMapping rawmapping = DataMapping.GetTableMapping(typeof(T));
            T obj = rawmapping.InitialData() as T;

            if (rawmapping.IsDataEntity)
            {
                DataEntity data = obj as DataEntity;
                data.SetContext(this);
            }
            return(obj);
        }
Example #4
0
        /// <summary>
        /// 从自增ID获取数据对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="id">自增</param>
        /// <returns>数据对象</returns>
        private T SelectSingleFromIdObj <T>(object id)
            where T : class, new()
        {
            DataTableEntityMapping dtmapping = DataMapping.GetTableMapping(typeof(T));

            if (dtmapping.IdentityField == null)
            {
                throw new LightDataException(RE.DataTableNotIdentityField);
            }
            DataFieldInfo   idfield = new DataFieldInfo(dtmapping.IdentityField);
            QueryExpression query   = idfield == id;

            return(SelectSingle(dtmapping, query, null, 0, SafeLevel.None) as T);
        }
Example #5
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);
        }
Example #6
0
        /// <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);
        }
Example #7
0
        /// <summary>
        /// 新增数据
        /// </summary>
        /// <param name="data">数据对象</param>
        /// <returns>受影响行数</returns>
        public int Insert(object data)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(data.GetType());
            object obj;
            int    rInt = 0;

            using (IDbCommand command = _dataBase.Factory.CreateInsertCommand(data))
            {
                IDbCommand identityCommand = _dataBase.Factory.CreateIdentityCommand(mapping);
                obj = ExecuteInsertCommand(command, identityCommand, SafeLevel.Default);
                if (identityCommand != null)
                {
                    identityCommand.Dispose();
                }
            }
            rInt = 1;
            if (mapping.IdentityField != null && !Object.Equals(obj, null))
            {
                object id = Convert.ChangeType(obj, mapping.IdentityField.ObjectType);
                mapping.IdentityField.Handler.Set(data, id);
            }
            return(rInt);
        }
        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());
        }
Example #9
0
        /// <summary>
        /// 批量更新数据
        /// </summary>
        /// <param name="type">更新对象类型</param>
        /// <param name="updates">更新对象类型</param>
        /// <param name="expression">查询表达式</param>
        /// <returns>受影响行数</returns>
        internal int UpdateMass(Type type, UpdateSetValue[] updates, QueryExpression expression)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(type);

            return(UpdateMass(mapping, updates, expression));
        }
Example #10
0
        /// <summary>
        /// 批量删除数据
        /// </summary>
        /// <param name="type">删除对象类型</param>
        /// <param name="expression">查询表达式</param>
        /// <returns></returns>
        internal int DeleteMass(Type type, QueryExpression expression)
        {
            DataTableEntityMapping mapping = DataMapping.GetTableMapping(type);

            return(DeleteMass(mapping, expression));
        }
Example #11
0
        /// <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);
        }