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