Click here to Skip to main content
15,886,422 members
Articles / Desktop Programming / Windows Forms

An Oracle Query Tool (part 1)

Rate me:
Please Sign up or sign in to vote.
4.56/5 (49 votes)
23 Feb 2006CPOL4 min read 171K   3.3K   71  
An Oracle query tool with syntax highlighting and a tabbed MDI interface.
Imports WeifenLuo.WinFormsUI
Imports System.Data.OracleClient
Imports ICSharpCode.TextEditor
Imports ICSharpCode.TextEditor.Document

Public Class frmQuery
    Inherits DockContent

    Private oOracleReader As New clsOracleReader
    Private ThreadQuery As System.Threading.Thread
    Private strStatus As String
    Private dStartTime As Date, dEndTime As Date
    Private bQueryChanged As Boolean = False
    Private strSavedAs As String

    Private Delegate Sub BindDatagrid()

    Private Sub frmQuery_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim strPathXSHD As String = My.Application.Info.DirectoryPath & "\res\"
        Dim provider As New FileSyntaxModeProvider(strPathXSHD)
        Dim manager As HighlightingManager = HighlightingManager.Manager
        manager.AddSyntaxModeFileProvider(provider)
        texteditorQuery.Document.HighlightingStrategy = manager.FindHighlighter("ORACLESQL")

        With texteditorQuery
            .Font = New Font("Courier New", 9, FontStyle.Regular)
            .ShowEOLMarkers = False
            .ShowInvalidLines = False
            .ShowSpaces = False
            .ShowTabs = False
            .ShowVRuler = False
            .ShowHRuler = False
            .IsIconBarVisible = False            
            .ShowLineNumbers = True
            .AutoScroll = True
        End With

        AddHandler texteditorQuery.ActiveTextAreaControl.Document.DocumentChanged, AddressOf DocumentEventHandler
    End Sub

    Private Sub DocumentEventHandler(ByVal sender As Object, ByVal e As ICSharpCode.TextEditor.Document.DocumentEventArgs)
        If Not bQueryChanged Then
            bQueryChanged = True
            Me.TabText = Me.TabText & "*"
        End If
    End Sub

    Private Sub frmQuery_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        Me.ContextMenuStrip = Me.Parent.ContextMenuStrip
    End Sub

    Private Sub CutMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CutMenuItem.Click
        texteditorQuery.ActiveTextAreaControl.TextArea.ClipboardHandler.Cut(sender, e)
    End Sub

    Private Sub CopyMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyMenuItem.Click
        texteditorQuery.ActiveTextAreaControl.TextArea.ClipboardHandler.Copy(sender, e)
    End Sub

    Private Sub PasteMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PasteMenuItem.Click
        texteditorQuery.ActiveTextAreaControl.TextArea.ClipboardHandler.Paste(sender, e)
    End Sub

    Private Sub SelectAllMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SelectAllMenuItem.Click
        texteditorQuery.ActiveTextAreaControl.TextArea.ClipboardHandler.SelectAll(sender, e)
    End Sub

    Private Sub UndoMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UndoMenuItem.Click
        texteditorQuery.Undo()
    End Sub

    Private Sub RedoMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RedoMenuItem.Click
        texteditorQuery.Redo()
    End Sub

    Public Sub ExecuteQuery()
        AddHandler oOracleReader.QueryCompleted, AddressOf QueryCompleted
        ThreadQuery = New System.Threading.Thread(AddressOf oOracleReader.ExecuteQuery)
        ThreadQuery.IsBackground = True
        dStartTime = DateTime.Now
        ThreadQuery.Start(texteditorQuery.Text)
        strStatus = "Executing..."
    End Sub

    Public Sub InterruptQuery()
        oOracleReader.InterruptQuery()
        If Not ThreadQuery Is Nothing Then ThreadQuery.Abort()
        ThreadQuery = Nothing
        strStatus = "Execution aborted..."
    End Sub

    Public Sub QueryCompleted()
        If Me.InvokeRequired Then
            Dim d As New BindDatagrid(AddressOf BindDatagridHandler)
            Invoke(d)
        Else
            BindDatagridHandler()
        End If
        ThreadQuery = Nothing
        oOracleReader.Clear()
    End Sub

    Private Sub BindDatagridHandler()
        Dim oDataset As DataSet = oOracleReader.Dataset        
        If Not oDataset Is Nothing Then            
            DataGridView1.DataSource = oDataset.Tables(0)
            DataGridView1.Show()
            dEndTime = DateTime.Now
            strStatus = oDataset.Tables(0).Rows.Count & " rows selected in " & System.Math.Round(dEndTime.Subtract(dStartTime).TotalSeconds, 3) & " seconds"
            Me.Cursor = Cursors.Default
        End If
    End Sub

    Private Sub btnExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExecute.Click
        Me.Cursor = Cursors.AppStarting
        ExecuteQuery()
    End Sub

    Private Sub btnAbort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbort.Click
        If MessageBox.Show("Do you wish to cancel the running query?", "Cancel query?", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
            Me.Cursor = Cursors.Default
            InterruptQuery()
        End If
    End Sub

    Public ReadOnly Property Status()
        Get
            Status = strStatus
        End Get
    End Property

    Public Property Changed() As Boolean
        Get
            Return bQueryChanged
        End Get
        Set(ByVal value As Boolean)
            bQueryChanged = value
        End Set
    End Property

    Public Property SavedAs() As String
        Get
            Return strSavedAs
        End Get
        Set(ByVal value As String)
            strSavedAs = value
        End Set
    End Property

    Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewPageToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.NewTab()
    End Sub

    Private Sub DuplicateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DuplicateToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.DuplicateTab()
    End Sub

    Private Sub CloseToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseToolStripMenuItem.Click
        Me.Close()
    End Sub

    Private Sub frmQuery_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If bQueryChanged And texteditorQuery.Text.Trim <> "" Then
            Me.ActivateMdiChild(Me)
            If MessageBox.Show("Do you wish save the changes before closing?", "Close...", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                Dim frmM As frmMain = Me.MdiParent
                If Not frmM Is Nothing Then frmM.SaveTab(Me, False)
            End If
        End If
    End Sub

    Private Sub SaveToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.SaveTab(Me, False)
    End Sub

    Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveAsToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.SaveTab(Me, True)
    End Sub

    Private Sub CloseAllToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseAllToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.CloseAll()
    End Sub

    Private Sub CloseAllButActiveToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseAllButActiveToolStripMenuItem.Click
        Dim frmM As frmMain = Me.MdiParent
        If Not frmM Is Nothing Then frmM.CloseAllButActive()
    End Sub

    Private Sub RenameTabToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RenameTabToolStripMenuItem.Click
        Dim strInputText As String = InputBox("Please insert a new name for the selected page", "Rename page", "")
        If strInputText.Trim <> "" Then Me.TabText = strInputText
    End Sub
End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Italy Italy
I am 40 years old and I've been working with C++, Visual Basic .NET, C# and ASP.NET. I have a large experience in Industrial Automation solutions, but I've worked also as Web developer and DBA. I like to share knowledge and projects with other people.

Comments and Discussions