public static string CallProcMethodGenerator(DbParameter[] dbParameter, string spname, int prefiexIndex, bool isPaging)
 {
     if (string.IsNullOrEmpty(spname))
     {
         throw new ArgumentNullException("spname");
     }
     if ((dbParameter == null) || (dbParameter.Length == 0))
     {
         if (((spname.IndexOf("get", StringComparison.OrdinalIgnoreCase) >= 0) || (spname.IndexOf("query", StringComparison.OrdinalIgnoreCase) >= 0)) || (spname.IndexOf("search", StringComparison.OrdinalIgnoreCase) >= 0))
         {
             return (string.Format("//TModel item = DbHelper.GetDataItem<TModel>(\"{0}\", null);\r\n", spname) + string.Format("List<TModel> list = DbHelper.FillList<TModel>(\"{0}\", null);\r\n", spname));
         }
         return string.Format("DbHelper.ExecuteNonQuery(\"{0}\", null);", spname);
     }
     bool flag = false;
     bool flag2 = false;
     bool flag3 = false;
     bool flag4 = false;
     foreach (DbParameter parameter in dbParameter)
     {
         if ((parameter.Direction == ParameterDirection.Output) || (parameter.Direction == ParameterDirection.InputOutput))
         {
             flag = true;
             if (string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_TotalRecords, StringComparison.OrdinalIgnoreCase) == 0)
             {
                 flag4 = true;
             }
         }
         else
         {
             if (string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_PageIndex, StringComparison.OrdinalIgnoreCase) == 0)
             {
                 flag2 = true;
             }
             if (string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_PageSize, StringComparison.OrdinalIgnoreCase) == 0)
             {
                 flag3 = true;
             }
         }
     }
     string str2 = spname.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Aggregate((i, j) =>
     {
         return i.Substring(0, 1).ToUpper() + i.Substring(1, i.Length - 1).ToLower()
             + j.Substring(0, 1).ToUpper() + j.Substring(1, j.Length - 1).ToLower();
     }).Replace(".", "");
     str2 = (isPaging || flag) ? (str2.FilterStr() + "Parameters") : string.Empty;
     StringBuilder builder = new StringBuilder();
     if (!string.IsNullOrEmpty(str2))
     {
         if ((flag2 && flag3) && flag4)
         {
             builder.Append("public class ").Append(str2).AppendLine(" : PagingInfo {");
             foreach (DbParameter parameter in dbParameter)
             {
                 if (parameter.DbType == DbType.Object)
                     continue;
                 if (((string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_TotalRecords, StringComparison.OrdinalIgnoreCase) != 0) && (string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_PageIndex, StringComparison.OrdinalIgnoreCase) != 0)) && (string.Compare(parameter.ParameterName.Substring(prefiexIndex), DbContext.STR_PageSize, StringComparison.OrdinalIgnoreCase) != 0))
                 {
                     builder.AppendFormat("\tpublic {0} {1} {{ get; set; }}\r\n", TypeConverter.ConvertToClrType(parameter.DbType), parameter.ParameterName.Substring(prefiexIndex));
                 }
             }
         }
         else
         {
             builder.Append("public class ").Append(str2).AppendLine(" {");
             foreach (DbParameter parameter in dbParameter)
             {
                 if (parameter.DbType == DbType.Object)
                     continue;
                 builder.AppendFormat("\tpublic {0} {1} {{ get; set; }}\r\n", TypeConverter.ConvertToClrType(parameter.DbType), parameter.ParameterName.Substring(prefiexIndex));
             }
         }
         builder.AppendLine("}\r\n");
     }
     builder.AppendFormat("var parameters = new {0}{{\r\n", str2);
     int num2 = 1;
     foreach (DbParameter parameter in dbParameter)
     {
         if (parameter.DbType == DbType.Object)
             continue;
         builder.AppendFormat("\t{0} = xxxxxxx{1}{2}\r\n", parameter.ParameterName.Substring(prefiexIndex), (num2++ < dbParameter.Length) ? "," : "", ((parameter.Direction == ParameterDirection.Output) || (parameter.Direction == ParameterDirection.InputOutput)) ? "\t\t// output" : "");
     }
     builder.AppendLine("};");
     if ((flag && flag2) && flag3)
     {
         builder.AppendFormat("List<TModel> list = DbHelper.FillListPaged<TModel>(\"{0}\", parameters);\r\n", spname);
         builder.AppendFormat("//List<TModel> list = DbHelper.FillList<TModel>(\"{0}\", parameters);\r\n", spname);
     }
     else if (((spname.IndexOf("get", StringComparison.OrdinalIgnoreCase) >= 0) || (spname.IndexOf("query", StringComparison.OrdinalIgnoreCase) >= 0)) || (spname.IndexOf("search", StringComparison.OrdinalIgnoreCase) >= 0))
     {
         if (dbParameter.Count(t => t.DbType == DbType.Object) > 0)
         {
             builder.AppendFormat("List<TModel> list = DbHelper.FillList<TModel>(\"{0}\", parameters);\r\n", spname);
         }
         else
         {
             builder.AppendFormat("TModel item = DbHelper.GetDataItem<TModel>(\"{0}\", parameters);\r\n", spname);
             builder.AppendFormat("//List<TModel> list = DbHelper.FillList<TModel>(\"{0}\", parameters);\r\n", spname);
         }
     }
     else
     {
         builder.AppendFormat("DbHelper.ExecuteNonQuery(\"{0}\", parameters);", spname);
     }
     return builder.ToString();
 }
示例#2
0
        public virtual GridData GetGridData(HttpContext context)
        {
            string view        = context.Request["view"];
            string columns     = context.Request["columns"];
            string sortname    = context.Request["sortname"];
            string sortorder   = context.Request["sortorder"];
            string _pagenumber = context.Request["page"];
            string _pagesize   = context.Request["pagesize"];
            string procedure   = context.Request["procedure"];

            string where = context.Request["where"];
            if (string.IsNullOrEmpty(procedure))
            {
                int?pagenumber = null, pagesize = null;
                //可分页
                if (!_pagenumber.IsNullOrEmpty() && !_pagesize.IsNullOrEmpty())
                {
                    pagenumber = _pagenumber.ToInt();
                    pagesize   = _pagesize.ToInt();
                    if (pagesize == 0)
                    {
                        pagesize = 20;
                    }
                }
                //可排序
                if (!sortname.IsNullOrEmpty())
                {
                    sortorder = sortorder.IsNullOrEmpty() || sortorder.EqualsTo("asc") ? "asc" : "desc";
                }

                /*
                 * where 为 json参数,格式如下:
                 * {
                 *    "roles":[
                 *       {"field":"ID","value":112,"op":"equal"},
                 *        {"field":"Time","value":"2011-3-4","op":"greaterorequal"}
                 *     ],
                 *    "op":"and","groups":null
                 *  }
                 *  FilterTranslator可以为以上格式的where表达式翻译为sql,并生成参数列表(FilterParam[])
                 */
                var dpRule = new DataPrivilegeRule(DbHelper.Db);


                var whereTranslator = new FilterTranslator();

                if (!where.IsNullOrEmpty())
                {
                    //反序列化Filter Group JSON
                    whereTranslator.Group = JSONHelper.FromJson <FilterGroup>(where);
                    //合并数据权限规则

                    whereTranslator.Group = dpRule.GetRuleGroup(view, whereTranslator.Group);
                }
                else
                {
                    //如果没有定义前台搜索规则
                    whereTranslator.Group = dpRule.GetRuleGroup(view, whereTranslator.Group);
                }
                if (whereTranslator.Group != null && whereTranslator.Group.rules != null)
                {
                    whereTranslator.Group.rules = whereTranslator.Group.rules.Where(i => i.value != null && i.value.ToString() != "全部" && i.value != "" && i.value != "undefined").ToList();
                }
                whereTranslator.Translate();

                if (string.IsNullOrEmpty(columns))
                {
                    return(GetGridData(view, whereTranslator.CommandText, sortname, sortorder, pagenumber, pagesize, whereTranslator.Parms.ToArray()));
                }
                else
                {
                    return(GetGridData(view, columns, whereTranslator.CommandText, sortname, sortorder, pagenumber, pagesize, whereTranslator.Parms.ToArray()));
                }
            }
            else
            {
                if (string.IsNullOrEmpty(where))
                {
                    return(GetGridData(procedure, null));
                }
                else
                {
                    var whereTranslator = new FilterTranslator();
                    whereTranslator.Group = JSONHelper.FromJson <FilterGroup>(where);
                    DbParameter[] parms = new DbParameter[whereTranslator.Group.rules.Count];
                    for (int i = 0; i < parms.Count(); i++)
                    {
                        DbParameter p    = this.DbProvider.DbProviderFactory.CreateParameter();
                        FilterRule  rule = whereTranslator.Group.rules[i];
                        p.ParameterName = "@" + rule.field.ToLower();
                        switch (rule.type)
                        {
                        case "string":
                            p.DbType = DbType.String;
                            break;

                        case "int":
                            p.DbType = DbType.Int32;
                            break;
                        }
                        p.Value  = string.IsNullOrEmpty(rule.value.ToString()) || rule.value.ToString().Equals("全部")?"":rule.value.ToString();
                        parms[i] = p;
                    }
                    return(GetGridData(procedure, parms));
                }
            }
        }