コード例 #1
0
        private void OnExecuteComplete(object sender, SqlExecuteCompleteEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action <object, SqlExecuteCompleteEventArgs>(DisplayResults), sender, e);
            }
            else
            {
                DisplayResults(sender, e);
            }

            _currentExecutionEngine = null;
            UpdateDatabaseContext();
        }
コード例 #2
0
        private void DisplayResults(object sender, SqlExecuteCompleteEventArgs e)
        {
            _executionTimer.Enabled = false;
            ShowElapsedTime();

            if (e.Exception == null)
            {
                DisplayNormalResults(sender, e);
            }
            else
            {
                DisplayExceptionResults(sender, e);
            }

            this.executeButton.Enabled               = true;
            this.connectButton.Enabled               = true;
            this.cancelQueryButton.Enabled           = false;
            this.disconnectButton.Enabled            = true;
            this.disconnectToolStripMenuItem.Enabled = true;
        }
コード例 #3
0
        private void DisplayNormalResults(object sender, SqlExecuteCompleteEventArgs e)
        {
            string sqlOutput = _currentExecutionEngine.Messages;

            TabPage pageToBeActivated = _messagesTab;

            mainTabControl.TabPages.Add(_messagesTab);
            bool hasError = false;

            foreach (OutputMessage message in _currentExecutionEngine.OutputMessages)
            {
                string text = message.Message + Environment.NewLine;
                _messagesTextBox.SelectionStart  = _messagesTextBox.TextLength;
                _messagesTextBox.SelectionLength = 0;

                _messagesTextBox.SelectionColor = message.IsErrorText ? Color.Red : Color.Black;
                _messagesTextBox.AppendText(text);
                hasError ^= message.IsErrorText;
            }

            List <DataTable> resultTables = _currentExecutionEngine.ResultTables.ToList();

            if (resultTables.Count > 0)
            {
                TabPage resultsTab = new TabPage(_tabTitleResults);
                pageToBeActivated = resultsTab;
                mainTabControl.TabPages.Add(resultsTab);

                StatusBar statusBar       = new StatusBar();
                int       statusBarHeight = 20;
                Size      gridSize        = new Size(resultsTab.Width, (resultsTab.Height - statusBarHeight) / resultTables.Count);
                statusBar.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right;
                statusBar.Size   = new Size(resultsTab.Width, statusBarHeight);
                statusBar.Top    = gridSize.Height * resultTables.Count;
                resultsTab.Controls.Add(statusBar);

                long rowCount = DisplayTablesOnTabPage(resultsTab, resultTables, gridSize);
                statusBar.Text     = string.Format("{0} resultset(s); {1:#,##0} row(s) total", resultTables.Count, rowCount);
                resultsTab.Resize += ResultsTab_Resize;
            }

            if (_currentExecutionEngine.OptimizerInfoTable != null)
            {
                TabPage optimizerInfoTab = new TabPage("Optimizer");
                mainTabControl.TabPages.Add(optimizerInfoTab);
                Size gridSize = new Size(optimizerInfoTab.Width, optimizerInfoTab.Height);
                DisplayTablesOnTabPage(optimizerInfoTab, new List <DataTable>()
                {
                    _currentExecutionEngine.OptimizerInfoTable
                }, gridSize);
            }

            if (_currentExecutionEngine.TransformationStatsTable != null)
            {
                TabPage transformationStatsTab = new TabPage("Transformations");
                mainTabControl.TabPages.Add(transformationStatsTab);
                Size gridSize = new Size(transformationStatsTab.Width, transformationStatsTab.Height);
                DisplayTablesOnTabPage(transformationStatsTab, new List <DataTable>()
                {
                    _currentExecutionEngine.TransformationStatsTable
                }, gridSize);
            }

            List <SqlParseTree> trees = new List <SqlParseTree>(TreeTextParser.Parse(sqlOutput));
            List <SqlMemo>      memos = new List <SqlMemo>(MemoTextParser.Parse(sqlOutput));

            foreach (SqlParseTree tree in trees)
            {
                TabPage tab = DrawTree(tree);
                mainTabControl.TabPages.Add(tab);
            }

            foreach (SqlMemo memo in memos)
            {
                TabPage tab = DrawMemo(memo);
                mainTabControl.TabPages.Add(tab);
            }

            mainTabControl.SelectedTab = pageToBeActivated;

            if (e.CancelledByUser)
            {
                executionStatus.Text = "Query was cancelled by user.";
            }
            else if (hasError)
            {
                executionStatus.Text = "Query completed with errors.";
            }
            else
            {
                executionStatus.Text = "Query executed successfully.";
            }
        }
コード例 #4
0
 private void DisplayExceptionResults(object sender, SqlExecuteCompleteEventArgs e)
 {
     DisplayException(e.Exception);
 }
コード例 #5
0
        private void ExecuteAllSql()
        {
            Exception exception = null;

            _isCancelled = false;

            try
            {
                List <string> sqlBatches = SplitSqlIntoBatches(_sql);
                _resultTables   = new List <DataTable>();
                _messages       = new StringBuilder();
                _outputMessages = new List <OutputMessage>();

                InitializeTrackers();

                using (Dal dal = new Dal(_connection))
                {
                    _dal = dal;
                    try
                    {
                        foreach (string sql in sqlBatches)
                        {
                            _connection.InfoMessage += CaptureMessages;
                            _connection.FireInfoMessageEventOnUserErrors = true;

                            try
                            {
                                using (DataSet resultSet = dal.ExecuteQueryMultipleResultSets(sql))
                                {
                                    foreach (DataTable table in resultSet.Tables)
                                    {
                                        _resultTables.Add(table.Copy());
                                    }
                                }
                            }
                            finally
                            {
                                _connection.InfoMessage -= CaptureMessages;
                            }

                            if (_isCancelled)
                            {
                                break;
                            }
                        }
                    }
                    finally
                    {
                        _dal = null;
                    }
                }

                FinalizeTrackers();
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            EventHandler <SqlExecuteCompleteEventArgs> executeCompleteHandler = this.ExecuteComplete;

            if (executeCompleteHandler != null)
            {
                SqlExecuteCompleteEventArgs args = new SqlExecuteCompleteEventArgs();
                args.Exception       = exception;
                args.CancelledByUser = _isCancelled;
                executeCompleteHandler(this, args);
            }
        }