public ActionResult ExecuteScript([FromRoute] Guid server, [FromRoute] Guid database, [FromRoute] Guid script) { DatabaseServer srv = Metadata.Servers.Where(srv => srv.Identity == server).FirstOrDefault(); if (srv == null) { return(NotFound()); } DatabaseInfo db = srv.Databases.Where(db => db.Identity == database).FirstOrDefault(); if (db == null) { return(NotFound()); } MetaScript scr = db.Scripts.Where(scr => scr.Identity == script).FirstOrDefault(); if (scr == null) { return(NotFound()); } Dictionary <string, object> parameters = ParseParameters(HttpContext); string responseJson = "[]"; string errorMessage = string.Empty; string sourceCode = ReadScriptSourceCode(srv, db, scr); IMetadataService metadata = Services.GetService <IMetadataService>(); metadata.AttachDatabase(string.IsNullOrWhiteSpace(srv.Address) ? srv.Name : srv.Address, db); metadata.UseCredentials(db.UserName, db.Password); IScriptingService scripting = Services.GetService <IScriptingService>(); string sql = string.Empty; IList <ParseError> parseErrors = null; if (parameters.Count > 0) { sql = scripting.PrepareScript(sourceCode, parameters, out parseErrors); } else { sql = scripting.PrepareScript(sourceCode, out parseErrors); } foreach (ParseError error in parseErrors) { errorMessage += error.Message + Environment.NewLine; } if (parseErrors.Count > 0) { return(StatusCode(StatusCodes.Status500InternalServerError, errorMessage)); } try { responseJson = scripting.ExecuteJson(sql, out IList <ParseError> executeErrors); foreach (ParseError error in executeErrors) { errorMessage += error.Message + Environment.NewLine; } if (executeErrors.Count > 0) { return(StatusCode(StatusCodes.Status500InternalServerError, errorMessage)); } } catch (Exception ex) { errorMessage = ExceptionHelper.GetErrorText(ex); return(StatusCode(StatusCodes.Status500InternalServerError, errorMessage)); } return(Content(responseJson)); }