Beispiel #1
0
        private string GetFrom()
        {
            if (schema.SelectCommand.CommandType == CommandType.TableDirect)
            {
                return(schema.SelectCommand.CommandText);
            }
            else if (schema.SelectCommand.CommandType == CommandType.StoredProcedure)
            {
                throw new E_SQLBuilder_NoSelectCommand();
            }
            else if (string.IsNullOrEmpty(schema.SelectCommand.CommandText))
            {
                throw new E_SQLBuilder_NoSelectCommand();
            }

            SqlParse sql = new SqlParse(schema.SelectCommand.CommandText);

            return(sql.GetFrom());
        }
        /// <summary>
        /// 根据CommandSchema创建命令,并将Shema中的参数设置到命令
        /// </summary>
        /// <param name="cmdSchema">命令配置</param>
        /// <returns></returns>
        public DbCommand getCommand(CommandSchema cmdSchema)
        {
            if (cmdSchema == null || string.IsNullOrEmpty(cmdSchema.CommandText))
            {
                throw new XException(Lang.NoUpLoadCommand);
            }

            DbCommand cmd = dbAdmin.getSqlCommand(cmdSchema.CommandText, cmdSchema.CommandType);

            SqlParse sqlp = new SqlParse(cmdSchema.CommandText);

            string[] parameters = sqlp.GetParamNames();

            foreach (string pName in parameters)
            {
                string             fName = pName.Remove(0, 1);
                string             val   = null;
                DbType             pType = DbType.String;
                ParameterDirection pDir  = ParameterDirection.Input;

                ParameterSchema ps   = cmdSchema.QueryParams == null ? null : cmdSchema.QueryParams.FindItem(pName);
                FieldSchema     flds = schema.Fields == null ? null : schema.Fields.FindItem(fName);

                if (pName.StartsWith(XSqlBuilder.OLD_VERSION_PIX))
                {
                    flds = schema.Fields.FindItem(fName.Remove(0, XSqlBuilder.OLD_VERSION_PIX.Length));
                }

                //获取字典定义中的参数类型,参数方向默认为input
                if (flds != null)
                {
                    pType = flds.DataType;
                }

                //获取参数定义中的参数类型,及参数方向;
                if (ps != null)
                {
                    pType = ps.DataType;
                    val   = ps.DefaultValue;
                    pDir  = ps.Direction;
                }
                //if (row.ContainsKey(fName))
                //    val = row[fName];

                //if (realParams.ContainsKey(pName))
                //    val = realParams[pName];


                switch (pDir)
                {
                case ParameterDirection.Input:
                    dbAdmin.addInParameter(cmd, pName, pType, val);
                    break;

                case ParameterDirection.InputOutput:
                    break;

                case ParameterDirection.Output:
                    dbAdmin.AddOutParameter(cmd, pName, pType, int.MaxValue);
                    break;
                }
            }

            return(cmd);
        }
        private DbCommand getSelectCommand(int pageSize, int pageNo, string fields, Dictionary <string, string> queryParams, string where, string orderBy, string groupBy)
        {
            string connectionName = _schema.ConnectionName;
            string selectSql;
            //  tableNames = new List<string>();

            DbCommand cmd = null;

            switch (_schema.SelectCommand.CommandType)
            {
            case CommandType.TableDirect:

                if (pageNo > 1 || pageSize > 1)
                {
                    cmd = getPagingSpCommand(_schema.SelectCommand.CommandText, pageSize, pageNo, fields, where, orderBy, groupBy);
                }

                if (cmd == null)
                {
                    selectSql = XSqlBuilder.BuildTableSql(_schema.SelectCommand.CommandText, pageSize, pageNo, fields, where, orderBy, groupBy);
                    cmd       = dbAdmin.getSqlStringCommand(selectSql);
                }
                else
                {
                    _schema.IsPagingByParams = true;
                }
                break;

            case CommandType.Text:
                selectSql = _schema.SelectCommand.CommandText;
                SqlParse xSql = new SqlParse(selectSql);
                cmd = dbAdmin.getSqlStringCommand(selectSql);
                //                    paramNames = xSql.GetParamNames();
                break;

            case CommandType.StoredProcedure:
                selectSql = _schema.SelectCommand.CommandText;
                cmd       = dbAdmin.GetStoredProcCommandWithSourceColumns(selectSql, fields.Split(','));
                break;
            }


            if (_schema.SelectCommand != null && _schema.SelectCommand.QueryParams != null)
            {
                foreach (ParameterSchema ps in _schema.SelectCommand.QueryParams)
                {
                    if (string.IsNullOrEmpty(ps.Id))
                    {
                        continue;
                    }
                    string name = ps.Id;

                    object value = ps.DefaultValue;

                    if (queryParams != null && queryParams.ContainsKey(name))
                    {
                        value = queryParams[name];
                    }

                    //if (name.Equals(DataSourceConst.PagingPageNo, StringComparison.OrdinalIgnoreCase))
                    //    value = pageNo;
                    //if (name.Equals(DataSourceConst.PagingPageSize, StringComparison.OrdinalIgnoreCase))
                    //    value = pageSize;

                    if (cmd.Parameters.Contains(name))
                    {
                        dbAdmin.Database.SetParameterValue(cmd, name, value);
                    }
                    else if (ps.Direction == ParameterDirection.Input)
                    {
                        dbAdmin.addInParameter(cmd, name, ps.DataType, value);
                    }
                    else
                    {
                        dbAdmin.AddOutParameter(cmd, name, ps.DataType, ps.DataSize);
                    }
                }
            }
            return(cmd);
        }