示例#1
0
        public ActionResult RunScriptExcel(string scriptname, string parameter = null)
        {
            var model   = new SqlScriptModel(CurrentDatabase);
            var content = CurrentDatabase.ContentOfTypeSql(scriptname);

            if (content == null)
            {
                return(Message("no content"));
            }

            var d = Request.QueryString.AllKeys.ToDictionary(key => key, key => Request.QueryString[key]);
            var p = new DynamicParameters();

            foreach (var kv in d)
            {
                p.Add("@" + kv.Key, kv.Value);
            }

            string script = model.AddParametersForSql(parameter, content, p, ViewBag);

            if (script.StartsWith("Not Authorized"))
            {
                return(Message(script));
            }

            using (var cn = CurrentDatabase.ReadonlyConnection())
            {
                cn.Open();
                return(cn.ExecuteReader(script, p, commandTimeout: 1200).ToExcel("RunScript.xlsx", fromSql: true));
            }
        }
示例#2
0
        public ActionResult RunScript(string name, string parameter = null, string title = null)
        {
            var m   = new SqlScriptModel(CurrentDatabase);
            var sql = m.FetchScript(name);

            if (sql == null)
            {
                return(Message("no sql script named " + name));
            }
            if (!SqlScriptModel.CanRunScript(sql))
            {
                return(Message("Not Authorized to run this script"));
            }
            var p    = m.FetchParameters();
            var pSql = m.AddParametersForSql(parameter, sql, p, ViewBag);

            ViewBag.Report = name;
            ViewBag.Name   = title ?? $"{name.SpaceCamelCase()} {parameter}";
            if (sql.Contains("pagebreak"))
            {
                ViewBag.report = PythonModel.PageBreakTables(CurrentDatabase, sql, p);
                return(View("RunScriptPageBreaks"));
            }
            ViewBag.Url = Request.Url?.PathAndQuery;

            string html;

            using (var cn = CurrentDatabase.ReadonlyConnection())
            {
                cn.Open();
                var rd = cn.ExecuteReader(sql, p, commandTimeout: 1200);
                ViewBag.ExcelUrl = Request.Url?.AbsoluteUri.Replace("RunScript/", "RunScriptExcel/");
                html             = GridResult.Table(rd, ViewBag.Name2);
            }
            return(View(new HtmlHolder {
                html = html
            }));
        }