예제 #1
0
        public string GetQuery()
        {
            context.ExecutionIO.HasTable = true;
            List <object[]> data; List <string> cols; List <Type> colTypes;
            int             pageindex        = this.context.ExecutionIO.TableMeta.currentPage;
            int             pagesize         = this.context.ExecutionIO.TableMeta.numPerPage;
            string          pageby           = "";
            string          paging           = CalcDependance.exefullSql(this.ckout(context.handler.getParaedSql()), context.paramsScaledValues);
            string          dbconnectionspec = context.handler.DB_CONNECTION.downReal();

            try
            {
                //后端分页
                if (context.ExecutionIO.TableMeta.isBackEndPaged)
                {
                    if (this.context.ExecutionIO.TableMeta.dataTotallSize < 0)
                    {
                        this.context.ExecutionIO.TableMeta.dataTotallSize = DBHelper.ToInt(DBHelper.getStringByRunQuery(
                                                                                               string.Format("select count(1) from ({0} )aname", paging)
                                                                                               , dbconnectionspec));
                        //datasize = int.Parse( .getValueBySql(string.Format("select count(1) from ({0} )aname", qry), conn));
                    }

                    int pstart, pend;
                    pstart = (pageindex - 1) * pagesize + 1; // zero based in sqlserver top,but 1 based for Oracle
                    if (this.context.ExecutionIO.TableMeta.dataTotallSize > pstart)
                    {
                        pend = Math.Min(this.context.ExecutionIO.TableMeta.dataTotallSize, (pageindex) * pagesize); //zero based
                    }
                    else
                    {
                        pend = (pageindex) * pagesize + 1;
                    }
                    if (pageby != "sql2000andbelow")
                    {
                        paging = string.Format(" select * from (select rownum as \"#\", t.* from ({2}) t) where \"#\" between {0} and {1}  ",
                                               pstart, pend, paging);
                    }
                }

                using (var ds = DBHelper.RunQuery(paging, dbconnectionspec).Tables[0])
                {
                    DynmicService.GetTableRowsDataCompact(ds, out cols, out data, out colTypes);
                    context.ExecutionIO.TableMeta.data = data;
                    context.ExecutionIO.TableMeta.cols = cols;
                    if (!context.ExecutionIO.TableMeta.isBackEndPaged)
                    {
                        this.context.ExecutionIO.TableMeta.dataTotallSize = data.Count;
                    }
                    return("");
                }
            }
            catch (Exception e)
            {
                context.ExecutionIO.TableMeta.cols = new List <string>();
                context.ExecutionIO.TableMeta.data = new List <object[]>();
                context.ExecutionIO.hasError       = true;
                return(e.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// 计算参数值,并返回是否为标量.如果是选项型,则生成选项->selectables;标量型则放入->参-值表:paramsScaledValues
        /// </summary>
        /// <param name="pa"></param>
        /// <returns></returns>

        private bool ParamEvalToResultScaled(EasyHandlerParam pa)
        {
            var scaled = false;

            if (pa.CONTROL_DATASOURCE_TYPE == "sql")
            {
                object r          = null;
                var    sql        = exefullSql(pa.CONTROL_DATASOURCE, context.paramsScaledValues);
                var    uncalcable = (context.depends.ContainsKey(pa.HANDLER_PARAM_ID) && context.depends[pa.HANDLER_PARAM_ID].Any(s => !nodescaled[s]));
                if (pa.ResultIsList())
                {
                    List <Options> options = new List <Options>();
                    if (!uncalcable) //有计算结果
                    {
                        var queresult = DBHelper.RunQuery(sql, pa.DB_CONNECTION.downReal());
                        options = generateOption(pa.CONTROL_DATASOURCE_KEY, pa.CONTROL_DATASOURCE_VALUE, queresult);
                        if (null != options && options.Count > 0)
                        {
                            var optionsHasTips = tipsFilter.Any(tip => options[0].Name.IndexOf(tip) >= 0);
                            if (optionsHasTips && way == DDLTipsShowWay.Client)
                            {
                                options.RemoveAt(0);
                            }
                            if (options.Count == 1)//标量
                            {
                                r      = options[0].Value;
                                scaled = true;
                            }
                        }
                    }
                    updateOptions(pa.PARAM_NAME, options);
                    updateValues(pa.PARAM_NAME, r);
                    return(scaled);
                }
                else
                {
                    if (!uncalcable)
                    {
                        //r = DBHelper.getStringByRunQuery(sql, pa.DB_CONNECTION);
                        r      = DynmicService.RunScalar(sql, pa.DB_CONNECTION.downReal());
                        scaled = true;
                    }
                    updateValues(pa.PARAM_NAME, r);
                    return(scaled);
                }
            }
            else
            if (pa.CONTROL_DATASOURCE_TYPE == "formatbycomma")
            {
                object         val     = null;
                List <Options> options = ParseToOptions(pa.CONTROL_DATASOURCE);
                if (options.Count == 1)//标量
                {
                    val    = options[0].Value;
                    scaled = true;
                }
                updateOptions(pa.PARAM_NAME, options);
                updateValues(pa.PARAM_NAME, val);
                return(scaled);
            }
            else
            {
                updateValues(pa.PARAM_NAME, null); //默认的取值方法,目前只有sql ,comma
                return(false);                     //
            }
        }