using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using SqlAdmin; namespace SqlWebAdmin { /// /// Summary description for query. /// public class query : System.Web.UI.Page { protected TextBox QueryTextbox; protected Button ExecuteButton; protected Panel ResultsPanel; protected Label ErrorLabel; protected CheckBox WrapCheckBox; protected Button LoadButton; protected Button SaveButton; protected HtmlInputFile FileUploadInput; public query() { Page.Init += new System.EventHandler(Page_Init); } private void Page_Load(object sender, System.EventArgs e) { HttpCookie cookie = Request.Cookies["WebDataAdministrator"]; if (cookie == null) Response.Redirect("default.aspx?error=sessionexpired"); SqlServer server = new SqlServer(cookie.Values["server"], cookie.Values["username"], cookie.Values["password"]); ResultsPanel.Visible = false; ErrorLabel.Visible = false; } private void Page_Init(object sender, EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); } #region Web Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.ExecuteButton.Click += new System.EventHandler(this.ExecuteButton_Click); this.SaveButton.Click += new System.EventHandler(this.SaveButton_Click); this.LoadButton.Click += new System.EventHandler(this.LoadButton_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void SaveButton_Click(object sender, System.EventArgs e) { // Dump out special header and the file content and end the response Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); // This header (RFC 1806) lets us set the suggested filename Response.AddHeader("Content-Disposition", "attachment; filename=query.sql"); Response.Write(QueryTextbox.Text); Response.End(); } private void LoadButton_Click(object sender, System.EventArgs e) { // Grab file from post data HttpPostedFile file = FileUploadInput.PostedFile; int length = file.ContentLength; byte[] buff = new byte[length]; file.InputStream.Read(buff, 0, length); // Convert from byte array to string StringBuilder qsb = new StringBuilder(); for (int i = 0; i < length; i++) qsb.Append(Convert.ToChar(buff[i])); QueryTextbox.Text = qsb.ToString(); } private void ExecuteButton_Click(object sender, System.EventArgs e) { if (QueryTextbox.Text.Trim().Length == 0) { ResultsPanel.Visible = false; ErrorLabel.Visible = true; ErrorLabel.Text = "You must enter a non-empty query"; return; } HttpCookie cookie = Request.Cookies["WebDataAdministrator"]; if (cookie == null) Response.Redirect("default.aspx?error=sessionexpired"); SqlServer server = new SqlServer(cookie.Values["server"], cookie.Values["username"], cookie.Values["password"]); DataTable[] tables = null; server.Connect(); SqlDatabase database = server.Databases[Request["database"]]; if (database == null) { server.Disconnect(); // Database doesn't exist - break out and go to error page Response.Redirect(String.Format("error.aspx?error={0}", 1000)); return; } try { tables = database.Query(QueryTextbox.Text); } catch (SqlException ex) { // Print error message ResultsPanel.Visible = false; ErrorLabel.Visible = true; ErrorLabel.Text = "The following error occured while executing the query:
\n" + String.Format("Server: Msg {0}, Level {1}, State {2}, Line {3}
\n", new object[] {ex.Number, ex.Class, ex.State, ex.LineNumber}) + Server.HtmlEncode(ex.Message).Replace("\n", "
") + "
\n"; } server.Disconnect(); // Print output tables, if they exist if (tables != null) { // Add header text "Results:" Label label = new Label(); label.Text = "

"; ResultsPanel.Controls.Add(label); // Loop through all the tables in the DataSet for (int i = 0; i < tables.Length; i++) { // Only print divider after first table if (i > 0) { // Create new label for grid divider label = new Label(); label.Text = "




"; ResultsPanel.Controls.Add(label); } DataGrid dataGrid = new DataGrid(); dataGrid.HeaderStyle.CssClass = "tableHeader"; dataGrid.ItemStyle.CssClass = "tableItems"; dataGrid.ItemStyle.Wrap = false; dataGrid.Width=Unit.Percentage(100); dataGrid.EnableViewState = false; dataGrid.PreRender += new EventHandler(DataGrid_PreRender); dataGrid.DataSource = tables[i]; dataGrid.DataBind(); ResultsPanel.Controls.Add(dataGrid); } ResultsPanel.Visible = true; ErrorLabel.Visible = false; } } private void DataGrid_PreRender(object sender, EventArgs e) { // Set the wrapping style of all the cells based on the checkbox, and HTML encode all the cell contents DataGrid d = (DataGrid)sender; foreach (DataGridItem item in d.Items) { foreach (TableCell t in item.Cells) { t.Wrap = WrapCheckBox.Checked; t.Text = Server.HtmlEncode(t.Text); } } } } }