Click here to Skip to main content
15,896,111 members
Articles / Programming Languages / SQL

A Visual SQL Query Designer

Rate me:
Please Sign up or sign in to vote.
4.94/5 (74 votes)
23 Oct 2009CPOL15 min read 392.5K   23K   292  
This article describes the implementation of a QueryDesignerDialog class that allows users to create SQL queries based on a given OLEDB connection string.
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAABAAQAEBAAAAAACABoBQAARgAAABAQAAAAACAAaAQAAK4FAAAgIAAAAAAIAKgIAAAWCgAAICAAAAAA
        IACoEAAAvhIAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAALEZYABtb
        dwB1WUQAhm5eAIhvXQCLcV4Aj3VhAJN6aAAzzGYAooh2AKKKeQCkjXwAIWWDACx0mgAvdpwAT3WPAHV+
        gwBTmrgAVJu4AFidugBcn7sAc6O2AHWquwAAn+YAAKPmAACn7AAQsOwAG7XtABy17AAwuuwAKrrwAEzJ
        8QBSyvIAUc30AGzO6gBs1fIActjyAHPa9QB64vsAr5aDAKqimwC3oZAAuqOTAJqhqQCur64AvrmxAL+7
        uwDDr6AAybmtAMe8sQDRxboAir3OAJfh7wCR5PYAnun2AKDq9gCh7PcArfD4ALHz+gC19foA29HHAPvf
        zgDq4dgA+uHRAPDi2QDN//8A0///AOzn4gDy5+EA+/r3AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        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
        AAC4YQAAvAcAAL4OAAC/HAAAvgAAAIBAAAAAwQAAAIEAAAADAAAB/QAAAf0AAAH9AAAB/QAAAQEAAIP/
        AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAABAAAAAQAAGggPAB4eJgAbJS8AEig3ABko
        NgAYLTsANyMqACAqNQApKDYAJis5ACgqOQArMT4AOzA1AEorEwBSNyMAWzsjAFk8KQBmPiIANGc8AGNC
        KgBuSi8AakszAGxNOABvUT0AcFI9ADY+TwAbQFYAH0RZACdGVwAsRlgAKkhZADtGVgAbW3cAJ01rAClU
        dAAgV30AJl54ACtbewBNQ0oAVExIAERMVwByVUAAdFhCAHVZRAB5XUkAa1tRAH9jTwB+Y1AATlppAEBd
        dwBjY2gAdG5xAHhzcAB3dHwAgGNPAIFjUACHa1YAhGxaAIluWwCKcF0AjXFcAJN0XwCGc2UAi3JhAI1y
        YQCLdGMAj3VhAI91ZACLd2oAk3llAJN6aACZfmsAj31xAEyWVABYrF8AmYFuAJeCcwCchHIAnoh2AJiJ
        fwCih3UAoYh2AKKJeACkjHoAoIt9AKSNfACrj3sAtJR+ACFlgwAtYIIAPnCHACxzmgA3cpIAA3e0AAJ5
        tQBHb4oAXnSIAG99igBufowAcnmDAHh4ggBzfYwAin6DAAAAAAAdkb0ANJW8AHOQnQBCgaAAT42qAFOY
        tQBdnbcAUpq4AFSbuABWnLkAaJmrAHOjtgAEhckAFpfMAAGK0wABjNMABo3QAAGK1AAAkdsAAJHcACyX
        xAAumcEAOaTGAACY4wAAmeUAAJ/mAACj5wAtq+AAMrHiADC67AA0uu0APbvoACq68ABuqsAAaavGAGms
        xwA9wO0AV8ftAFTK7gBWzO4AWMzuAEzJ8QBRzfQAWMzwAH7A5QBwyeAAe8LqAG7U7QBs1fIAcNjxAHrd
        8gB93PYAUPX/AHri+wCMhIQAhYaOAJKKhgCcjIIAkIyLAIyQlwCYk5cAppOGAKmSgQCsk4AAr5aDAKuU
        hQCuloQAppSIAKiUiACwloMAtZqGALCZiQCznIoAsZ2NALWejAC2oI8AvKGLAKqimwCzoJIAt6GQALKh
        lQC4oZEAuaSTALqklAC9pJQAvqmaAICgoQCapa8AwqybAMSuoADFsKEAybWmAMa6rgDKuq4AzL2xAMC7
        uwDOwLMA08GzANHEugDbxLgA18i9AO7GswDvzLsAir3OAJe/2gCZw9kAn9bhAKXc5QCX4e8AieP2AJHk
        9gCe6fYAqODnAKvl7ACg6/YAqvD4ALP0+gC69/wAuvj9ALz//wDCxssA1MjAANnNwgDb0ccA3tLKANHS
        1ADe2NAA1NXZANfa3wDy08UA+9/OAOff2wDp4dkA+uHRAPDi2QD349oA9+TbAPfk3ADC//8AzP//ANP/
        /wDs5uIA7+voAPLn4QDx7eoA+vHtAPj18gD7+fcA/v7+AAAAAAD+/v4AAAAAAGdnZ2dnZ2dnZ2dnZ+Vi
        AjJnZ2dnZ2dnZ2cvK2dnZ2dnZ2dnZ2dnZ2dnZ2dnv4V9BTNnZ2dnZ2dnQSvOsWdnZ2dnZ2dnZ2dnZ2dn
        Z2dnYoVoA6NnZ2dnZ6Ur8Oa3Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnYoV9BJ9nZ2dLK/Hmt2dnZ2dnZ2dnZ2dn
        Z2dnZ2dnZ2dnYoV9G2ZnOSvx5rdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYoV8HkQr8ea3Z2dnZ2dnZ2dJ
        EmdJEmdJEmdJEmdnZ2dnYoU+K/nmt2dnZ2dnZ2dnZ0pJZ0pJZ0pJZ0pJZ2dnZ2dnPiv75rdnZ2dnZ2cp
        rGdnZ2dnZ2dnZ2dnZ2dnZ2dnZz4r/Oa3WqRnZ2dnKaU6uGdJEmdnZ2dnZ2dnZ2dnZ2emK/zmt4VpNKFn
        Z6sp6cYpZ0pJZ2dnZ2dnZ2dnZ2dnTCv85rdnYmq+Rz03LLE4KWdnZ2dnZ2dnZ2dnZ6ZMPy8r/Oa3Z2dn
        ocrBvK9SL2dnZ2dJEmdnZ2dnZ2emplNSTcTmt2dnZ2fA5Pnv6VI6Z2dnZ0pJZ2dnZ2dnZ7nk5MbJVUZn
        Z2dnZ8Xr/PnNTmdnZ2dnZ2dnZ2dnZ2dnsGdnZ8WpTWdnZ2dntvj8zU5nZ2dnZ2dnZ2dnZ2dnZ2emZ2dn
        5L2mZ2dnZ2dN/MtOZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2fFwKZnZ2dnTbFOTmdnZ2dnZ2dnZ2dnZ2dnZ2dn
        Z2emsLKmZ2dOTk5OTmdnZ2dnZ2dnZ2dnazExMTEjMSFnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2t1fpWX
        h3heXSFnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnXISOmpmMf3p0IWdnZ2dnZ2dnZ2dnZ2dJEmdnZ2dnZ2dc
        hY+amYx/enchZ2dnZ2dnZ2dnZ2dnZ0pJZ2dnZ2dnZ1yFj5qZjH96dyFnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dn
        Z2dnXIWPmpmMf3t5IWdnZ2dnZ2dnZ2dnZ2dJEmdnZ2dnZ2drhpOamYx/e3ciZ2dnZ2dnZ2dnZ2dnZ0pJ
        Z2dnZ2dnZ2yGkJqZjIB6dyVnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnbYWTmpmMf3p3JWdnZ2dnZ2dnZ2dn
        Z2dJEmdnZ2dnZ2duhY+amYx/enZZZ2dnZ2dnZ2dnZ2dnZ0pJZ2dnZ2dnZ26T1dvd3JuNg1lnZ2dnZ2dn
        Z2dnZ2dnZ2dnZ2dnZ2dnbt7e3t7e3t7eWWdnZ2dJEmdJEmdJEmdJEmdnZ2dnZ2eJ0tLZ3d3Y09NZZ2dn
        Z0pJZ0pJZ0pJZ0pJZ2dnZ2dnZ2eJi4qKioqLcmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2f/8P+f//B/D//4
        Pg///Bwf//4IP///AH+ST4D/kk/B+f//gPCf/wBgn/4IAf/gHAefwDwHn8B8D//cfB//3Hw///x4f//w
        wf/AP///gB///4Af/z+AH/8/gB///4Af/z+AH/8/gB///4Af/z+AH/8/gB///4AeST+AHkk/wD///ygA
        AAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0tT/bn6M/xslL/9jY2j/AAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAfmNQ/3VZRP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqlr/8wuuz/LpnB/xgtO/90bnH/AAAAAAAA
        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
        //8=
</value>
  </data>
</root>

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
Brazil Brazil
Software Architect/Developer with several years experience creating and delivering software.

Full-stack Web development (including React, Firebase, TypeScript, HTML, CSS), Entity Framework, C#, MS SQL Server.

Passionate about new technologies and always keen to learn new things as well as improve on existing skills.

Comments and Discussions