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