示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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());
        }