protected override void BuildCommand() { base.dbCommand.CommandText = this.spName; base.dbCommand.CommandType = CommandType.StoredProcedure; SPSchema schema = CacheManager.Instance.GetEntity <SPSchema, string>(owner.ConnectionName, spName, TimeSpan.MaxValue, (name) => { return(owner.DbDriver.GetSpSchema(name)); }); ThrowExceptionUtil.ArgumentConditionTrue(schema != null, "tableName", "Can not find sp. Name:{0}".FormatWith(spName)); DataAdapterParser dataAdapterParser = new DataAdapterParser(owner, dataAdapter); if (dataAdapter != null) { foreach (SPParameter spParameter in schema.ParameterList) { DbParameter parameter = owner.DbDriver.CreateParameter(); parameter.ParameterName = spParameter.Name; parameter.Direction = spParameter.Direction; //parameter.DbType = spParameter.DbType; if (spParameter.DbType == "REF CURSOR") { IEntityProxy parameterProxy = EntityProxyManager.Instance.GetEntityProxyFromType(parameter.GetType()); if (parameter.GetType().Namespace == "System.Data.OracleClient") { parameterProxy.SetPropertyValue(parameter, "OracleType", 5); //parameter.DbType = (DbType)5; } else { parameterProxy.SetPropertyValue(parameter, "OracleDbType", 0x79); } } if (dataAdapter[spParameter.Name] != null) { parameter.Value = dataAdapter[spParameter.Name]; } else { if (owner.DbDriver.DbTypeMap.ContainsKey(spParameter.DbType)) { Type type = owner.DbDriver.DbTypeMap[spParameter.DbType]; parameter.Value = GetDefaultValue(type); if (spParameter.Direction == ParameterDirection.InputOutput && spParameter.MaxLength > 0) { parameter.Size = spParameter.MaxLength * 2; } } } base.dbCommand.Parameters.Add(parameter); } } }
protected override void BuildCommand() { BeeDataAdapter columnDataAdapter = new BeeDataAdapter(); columnDataAdapter.Merge(this.dataAdapter, true); // 移除不存在的列名 及 计算列 TableSchema tableSchema = owner.GetTableSchema(tableName); ThrowExceptionUtil.ArgumentConditionTrue(tableSchema != null, "tableName", "can not find table. Name:{0}".FormatWith(tableName)); List <string> needToRemovedList = new List <string>(); foreach (string key in columnDataAdapter.Keys) { ColumnSchema columnSchema = tableSchema.GetColumn(key); if (columnSchema == null) { needToRemovedList.Add(key); } else if (columnSchema.IsComputeField) { needToRemovedList.Add(key); } else { // do nothing here. } } if (tableSchema.IdentityColumn != null) { needToRemovedList.Add(tableSchema.IdentityColumn.ColumnName); } foreach (string key in needToRemovedList) { columnDataAdapter.RemoveKey(key); } DataAdapterParser dataAdapterParser = new DataAdapterParser(owner, columnDataAdapter); base.dbCommand.Parameters.AddRange(dataAdapterParser.DbParameterList.ToArray()); string whereClause = string.Empty; if (sqlCriteria != null) { this.sqlCriteria.Owner = owner; whereClause = string.Format("where {0}", sqlCriteria.WhereClause); base.dbCommand.Parameters.AddRange(sqlCriteria.DbParameters.ToArray()); } if (owner.DbDriver.GetType() == typeof(OracleDriver)) { string sqlText = string.Format("update {0} set {1} {2}", owner.DbDriver.FormatField(this.tableName), dataAdapterParser.UpdateClause, whereClause); sqlText = sqlText.Replace(Environment.NewLine, " "); base.dbCommand.CommandText = sqlText; } else { base.dbCommand.CommandText = string.Format("update {0} \r\nset {1} \r\n{2}", owner.DbDriver.FormatField(this.tableName), dataAdapterParser.UpdateClause, whereClause); } }
protected override void BuildCommand() { base.dbCommand.CommandType = CommandType.Text; BeeDataAdapter columnDataAdapter = new BeeDataAdapter(); columnDataAdapter.Merge(this.dataAdapter, true); // 移除不存在的列名 TableSchema tableSchema = owner.GetTableSchema(tableName); ThrowExceptionUtil.ArgumentConditionTrue(tableSchema != null, "tableName", "can not find table. Name:{0}".FormatWith(tableName)); List <string> needToRemovedList = new List <string>(); foreach (string key in columnDataAdapter.Keys) { ColumnSchema columnSchema = tableSchema.GetColumn(key); if (columnSchema == null) { needToRemovedList.Add(key); } else if (columnSchema.IsComputeField) { needToRemovedList.Add(key); } else { // do nothing here. } } foreach (string key in needToRemovedList) { columnDataAdapter.RemoveKey(key); } DataAdapterParser dataAdapterParser = new DataAdapterParser(owner, columnDataAdapter); base.dbCommand.CommandText = string.Format(@" insert into {0} ({1}) values ({2});" , owner.DbDriver.FormatField(this.tableName) , dataAdapterParser.ColumnClause, dataAdapterParser.ParameterClause); if (owner.DbServerType == DBServerType.Oracle) { string sqlText = string.Format(@"begin {0} end;", base.dbCommand.CommandText); sqlText = sqlText.Replace(Environment.NewLine, " "); base.dbCommand.CommandText = sqlText; } else if (owner.DbServerType == DBServerType.Pgsql) { if (!string.IsNullOrEmpty(identityColumnName)) { string identitySelectString = string.Format(@"; SELECT {0} ", owner.DbDriver.IdentitySelectString); identitySelectString = string.Format(identitySelectString, tableName).ToLower(); base.dbCommand.CommandText = base.dbCommand.CommandText + identitySelectString; } } else { if (!string.IsNullOrEmpty(identityColumnName)) { string identitySelectString = string.Format(@" SELECT {0}", owner.DbDriver.IdentitySelectString); base.dbCommand.CommandText = base.dbCommand.CommandText + identitySelectString; } } base.dbCommand.Parameters.AddRange(dataAdapterParser.DbParameterList.ToArray()); }