private void FireEvent(ExecutionQueryEvent e) { if (this._Alive) { e.QueryParams = this.QueryParams; e.TAG = this.QueryParams.Hash; OnStatementExecuted(this, e); } }
internal void OnStatementExecuted(object t, ExecutionQueryEvent e) { StatementExecuted?.Invoke(t, e); if (e.Status != Status.RUNNING && this.queryThread != null) { lock (this.queryThread) { this.queryThread.StatementExecuted -= OnStatementExecuted; this.queryThread = null; } } }
internal static DataTable HistoryDataTableBuilder(ExecutionQueryEvent e) { DataTable data = new DataTable(); DataColumn c0 = new DataColumn("Status"); DataColumn c1 = new DataColumn("Query"); DataColumn c2 = new DataColumn("Rows affected"); DataColumn c3 = new DataColumn("Info"); DataColumn c4 = new DataColumn("Secs/Millis"); DataColumn c5 = new DataColumn("Executed At"); c0.DataType = System.Type.GetType("System.Byte[]"); data.Columns.Add(c0); data.Columns.Add(c1); data.Columns.Add(c2); data.Columns.Add(c3); data.Columns.Add(c4); data.Columns.Add(c5); DataRow row = data.NewRow(); string info = ""; if (e.Ex != null) { row["Status"] = IconHelper.status_error_arr; } else if (e.Status == Status.CANCELED) { row["Status"] = IconHelper.status_info_arr; info = "Canceled"; } else if (e.Status == Status.ABORTED) { row["Status"] = IconHelper.status_info_arr; info = "Aborted"; } else { row["Status"] = IconHelper.status_ok_arr; } string query = e.query != null ? e.query : e.QueryParams != null ? e.QueryParams.Sql : ""; row["Query"] = query; row["Rows affected"] = e.recordsAffected; row["Info"] = e.Ex != null ? e.Ex.Message : info; row["Secs/Millis"] = (int)e.duration.TotalSeconds + "/" + (int)e.duration.TotalMilliseconds; row["Executed At"] = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss"); data.Rows.Add(row); return(data); }
internal void SetHistory(ExecutionQueryEvent e) { this.SuspendLayout(); this.dataGridViewHistory.SuspendLayout(); if (this.dataGridViewHistory.DataSource == null) { this.dataGridViewHistory.DataSource = new DataTable(); } DataTable data = ControlBuilder.HistoryDataTableBuilder(e); int firstdisplayidx = this.dataGridViewHistory.FirstDisplayedScrollingRowIndex; ((DataTable)this.dataGridViewHistory.DataSource).Merge(data); if (firstdisplayidx > 1) { this.dataGridViewHistory.FirstDisplayedScrollingRowIndex = firstdisplayidx; } this.dataGridViewHistory.ResumeLayout(); this.ResumeLayout(); }
private void OnStatementExecuted(object sender, ExecutionQueryEvent e) { StatementExecuted?.Invoke(sender, e); if (e.Status == Status.HIDDEN) { return; } else if (e.Status == Status.ABORTED) { this.Invoke((MethodInvoker) delegate { base.GetMainHome().AbandonAndOpenNewConnection(); }); } foreach (TabPageHolder dv in tabControl1.Controls) { if (dv.GetDataView().GetHashCode() == e.TAG) { this.Invoke((MethodInvoker) delegate { if (e.Status == Status.FINISHED && e.QueryParams.Sql == null) { dv.GetDataView().SetData(e.data, e.query); } else if (e.Status == Status.FINISHED && e.QueryParams.Sql != null) { dv.GetDataView().AppendData(e.data); } if (e.QueryParams.Sql == null || e.Status == Status.ABORTED || e.Status == Status.CANCELED) { dv.GetDataView().SetHistory(e); } }); break; } } }
protected override void run() { _Alive = true; List <string> statements = base.Statements(); ExecutionQueryEvent eventResult = null; for (int i = 0; i < statements.Count; i++) { bool is_last = statements.Count - 1 == i; CurrentQuery = statements[i]; try { if (!_Alive) { FireEvent(new ExecutionQueryEvent(Status.CANCELED)); break; } //Execute with adapter if is the last statement to fill the dataTable with data Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); using (Command = new DbCommandFactory(Con(), statements[i]).Create()) { if (!_Alive) { break; } using (reader = Command.ExecuteReader()) { if (!_Alive) { break; } bool is_select = Utils.IsShowDataTypeOfCommand(statements[i]); var resultData = new DataTable(); if (is_last) { using (DataSet ds = new DataSet() { EnforceConstraints = false, CaseSensitive = false }) { if (is_select && this.QueryParams.Offset > 0) { //skip, apply offset int count = 0; while (count++ != this.QueryParams.Offset && reader.Read()) { ; } } ds.Tables.Add(resultData); if (is_select && this.QueryParams.Limit > 0) { var schema = reader.GetSchemaTable(); var listCols = new List <DataColumn>(); if (schema != null) { foreach (DataRow row in schema.Rows) { listCols.Add(AddTableColumn(resultData, (Type)(row["DataType"]), System.Convert.ToString(row["ColumnName"]))); } } int count = 0; while (count++ != this.QueryParams.Limit && reader.Read()) { var row = resultData.NewRow(); for (int x = 0; x < listCols.Count; x++) { row[((DataColumn)listCols[x])] = reader[x]; } resultData.Rows.Add(row); } } else { resultData.Load(reader, LoadOption.OverwriteChanges); } ds.Tables.Remove(resultData); } } stopWatch.Stop(); eventResult = new ExecutionQueryEvent(is_last ? Status.FINISHED : Status.RUNNING) { query = statements[i], duration = stopWatch.Elapsed, recordsAffected = reader.RecordsAffected, data = resultData }; Command?.Cancel(); } } FireEvent(eventResult); } catch (DbException ex) { if (this.ContinueExecutingNextOnFail) { ///log #if DEBUG Console.WriteLine(ex.Message); #endif //status change in future depending on user selection continue or not after error FireEvent(new ExecutionQueryEvent(is_last ? Status.FINISHED : Status.RUNNING) { Ex = ex, query = statements[i] }); } else { FireEvent(new ExecutionQueryEvent(Status.ERROR) { Ex = ex, query = statements[i] }); } } catch (IndexOutOfRangeException ex) { if (this.ContinueExecutingNextOnFail) { //better format/handle the sql errors/exceptions #if DEBUG Console.WriteLine(ex.Message); #endif FireEvent(new ExecutionQueryEvent(is_last ? Status.FINISHED : Status.RUNNING) { Ex = ex, query = statements[i] }); } else { FireEvent(new ExecutionQueryEvent(Status.ERROR) { Ex = ex, query = statements[i] }); } } catch (Exception ex) { if (this.ContinueExecutingNextOnFail) { #if DEBUG Console.WriteLine(ex.Message); #endif FireEvent(new ExecutionQueryEvent(is_last ? Status.FINISHED : Status.RUNNING) { Ex = ex, query = statements[i] }); } else { FireEvent(new ExecutionQueryEvent(Status.ERROR) { Ex = ex, query = statements[i] }); } } } }
protected virtual void OnStatementExecuted(object t, ExecutionQueryEvent e) { StatementExecuted?.Invoke(t, e); }