/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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()); }
/// <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)); }
/// <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)); }
/// <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); }