Click here to Skip to main content
Click here to Skip to main content

QueryCommander SQL Editor

By , 27 Sep 2005
 

Sample Talbe IntelleSense

Sample Column IntelliSense

Sample Talbe IntelleSense

Sample Column IntelliSense

Introduction

With version 4.0 of QueryCommander comes loads of new or improved features such as:

  • Much improved VSS support.
  • Test bench for testing scripts and database objects.
  • Implemented “edit-in-grid” for Oracle.
  • Encrypted password.
  • Extended objects in Server Explorer (table fields, triggers and UDTs to the server browser etc.).
  • Print functionality (output or statement).
  • Abort running query.
  • Documentation Header enhancements.
  • Query builder for creating statement by drag and drop of fields into a Query window.
  • Extended database support for Firebird and DB2.
  • Customized tab size setting.
  • The IntelliSense is extended to give the user information about all possible joins between tables in a statement.
  • Filter option on creating documentation file.
  • Save before close window.
  • New plug-ins for saving result as XML and for saving result as an Excel file.
  • And much, much more.

For those who yet haven't used QueryCommander, it is basically a SQL editor in a modern developer environment with IntelliSense and many useful features to help in the day to day work with databases. It is not the complete database administration tool. If you really need to dig down the fundamentals, you should use Microsoft Query Analyzer, Toad etc. However, if you need a good tool to rapidly create queries, stored procedures, user defined functions etc., we hope QueryCommander will be your alternative.

QueryCommander supports:

  • Microsoft SQL Server 2005
  • Microsoft SQL Server 2000
  • Microsoft SQL Server 6.5
  • MySQL 4.x
  • Oracle 9i
  • Firebird
  • DB2

Background

The application has been developed since May 2003. Its primary goal is to bring a more modern environment to the developers working with databases. It started out with a handful of features such as IntelliSense, unified comment header generator etc. But as the application spread to more users, the demands for more features grew. The project has been hosted on the SourceForge where many developers and users have helped in the evolution of this application. The requests for more features have been greater than ever. This is the main reason why the future of this project is best served under the OpenSource "umbrella".

Using the code

Since the code is subject to changes, please visit the SouceForge site for downloading the code.

GUI Framework

Weinfen Luo has been kind enough to provide us with the Visual Studio layout and design. This means we have a MDI form (MainForm.cs) and some child forms (FrmQuery, FrmOutput, FrmDBObjects etc...). In order for this to work, the child window inherits from WeinfenLuo.WinFormsUI.DockContent. All other windows are "pop-up"-dialogs (FrmGotoLine, FrmSearch, FrmXMLErrors etc.).

Query Window

The Editor dialog (FrmQuery) initiates most of the public logic within this application. Each Query dialog has its own database connection object.

The Editor

This has been the biggest challenge while developing the QueryCommander, until the guys at SharpDevelop released their ICSharpCode.TextEditor. It took some minor adjustments in order to make the highlighting work with the SQL language.

Database

QueryCommander supports five different data providers, each data provider has its own Data Manager which inherits from IDatabaseManager. A Data Manager comes with a set of predefined queries used for IntelliSense etc. These queries are found in \Meta\QueryString.xml.

Credits and thankfulness

  • Weifen Luo - DockPanel Suite is designed to achieve docking capability for MDI forms. It can be used to develop Visual Studio .NET style applications.
  • #develop - SharpDevelop is an open source IDE for the .NET platform. QueryCommander is using their ICSharpCode.TextEditor.
  • Rockwolf - For hosting the development of QueryCommander.
  • Aprenot - Reusable Diff Algorithm in C#.
  • Rama Krishna Kolluri - C# class library for exporting data to CSV/Excel file.
  • Franz Ehrenhuber - For testing, help and input.
  • Frans Nylin - For helping out with the Oracle implementation.
  • Lindsey Lewis - For developing, help and input.
  • Christian Halvarsson and Farid Benhajji - For helping out with the web layout.

For more information

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Mikael Håkansson
Web Developer
Sweden Sweden
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberAbinash Bishoyi5 Mar '13 - 6:44 
Nice
GeneralMy vote of 5mvpKanasz Robert25 Sep '12 - 22:52 
Great app. Smile | :)
QuestionAdding stored procedures to Drag and Dropmemberstain35653 Nov '11 - 2:50 
I would like to add Exec and Create options to the drag and drop for Stored procedures. I am ok with the code once withing FrrmQuery (i.e. building the script).
 
However, the drag itself is not being recognised. When i right click and drag over to the query window, the icon does not change to a "+" and thus the context options are not available.
 
What extra code do I need to put in the drag processing so that stored procedures are included?
GeneralDocking panels - preventing draggingmemberstain356517 Jun '11 - 0:39 
This is a very useful tool for our company as it will allow us, with some modifications, to restrict and record production sql accesses, so thanks for this.
 
I am altering the code to do this but have noted one aspect that we, ideally, would like to turn off.
 
There is an option to left click on the tab of a query and drag this out into its' own floating window.
 
As we are trying to strictly record info against query panels for auditing, the sequence of the docked query forms, as they appear across the MainForm, is important. Creating floating forms or moving these around makes this sequence very difficult to deal with.
 
Is there a simple way in the code of turning off the drag and drop facility that allows forms themselves to be moved around or floated? I have looked for this but must admit, I am a little bamboozled so far.
 
Cheers
 
Mark
Questionany updates for sql server 2008 an oracle 10i ??memberalhambra-eidos27 Dec '10 - 0:49 
any updates for sql server 2008 an oracle 10i ??
 
thanmks
AE

GeneralA great applicationmemberzhoufoxcn13 May '10 - 21:35 
A Great Application.In these days,I plan to develop a tool like this for SQLite,you give me revelation,thank you.
GeneralMissing "normally expected" featuresmemberPandele Florin29 Sep '09 - 7:26 
1)No GUI browsing (list of accessible servers) for an SQL server, no browsing for accessible databases(not even when an SQL server+credentials are correctly specified ).
 
Someone that does not dreams databases and does not create connection strings by heart will, most certainly, hit a wall when the first dialog shows up. (ok, the second, you get my drift..)
 

2)No option to upload/download blobs.(It would justify using this instead of the standard Microsoft UI).
 
Sorry, but this is the real world.
Easy to use software is mostly appreciated.
Free or not.
QuestionSupport Oracle 10g ?memberalhambra-eidos21 May '09 - 23:14 
Which is the latest version ?
 
Thanks
 
AE

QuestionQueryCommander SQL Editor Licensememberirinabe20 Jan '09 - 0:27 
Hi.
We have come across your code about "QueryCommander SQL Editor". We would like to use your editor and we are interested to know what is the type of license attached to it among all the licenses specified here?
Thanks
AnswerRe: QueryCommander SQL Editor Licensememberjohn_17265 Mar '10 - 9:51 
Here is the license found in the source code:
 
// *******************************************************************************
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
// *******************************************************************************

GeneralI couldnt get it to workmemberuofakron13 Nov '07 - 9:26 
As compared to SQl Enterprise manager (which works fine) , I cant get the server browser to work.
it errored out,
also shouldnt intellisence work automagically?
I cant get that going either. Maybe the issue is related to the blown up brower.
after i reopened the app and ran a query the server browser worked.
Sadly still no automagic intellisense...

GeneralSybase SupportmemberC.DHAKCHINA MOORTHY22 Oct '07 - 0:49 
Hi,
 
Did you complete the Sybase support?
 
Best regards,
DHAKCHINA MOORTHY.C
QuestionIntellisense not workingmembercyber-drugs6 Sep '07 - 2:59 
I've installed the app fine, and connected to a database fine, but there is no intellisense, do I need to do something to turn it on?
GeneralEditor and underscorememberOne_Turtle29 Aug '07 - 3:13 
If anybody is still missing the underscore, I suggest you get the latest ICSharp TextEditor from http://www.sharpdevelop.net/OpenSource/SD/
 
build the text Editor control, open Query Commander remove the reference to the version 1.1.x TextEditor and add in the new version (2.2.1.2648 at time of writing).
 
HTH
 
Mark A
QuestionWon't connect?memberjholovacs24 Jul '07 - 2:35 
Just downloaded 4.0.1.0, and hell if I can get the thing to connect to a single 2000/ 2005 database instance. I have tried the server name, the server name with the default instance format (server\mssqlserver), the IP address, etc, and all I get is a lousy "Invalid connection" with two lines of dump:
 
at QueryCommander.FrmDBObjects.RefreashTreeView()
 
at QueryCommander.MainForm.PopulateDBConnections()
 
I have tried this using the SQL Client for a 2000 machine, and local 2005 instance, with absolutely no luck. I am using integrated security.
 
What gives?
GeneralSQL IntellisensememberRavi Gyani27 Apr '07 - 10:57 
I recently tried out KNOCKS SQL-Sense, http://www.knocks-solutions.com
 
It is free and is good while using SQL Query Analyser.
 
Ravi Gyani

QuestionProblem with fontmemberoaxaca_salsa2 Apr '07 - 22:53 
Hi there,
 
I have a problem with the "Courier New" - font in the editor. When I switch the size to 10 or less under Options > Editor all the underscores (_) disappear. Confused | :confused:
 
Any ideas how to fix that?
 
Thanks.
QuestionDoes it support Oracle10g?memberhermanho12 Mar '07 - 4:11 
Does it support Oracle10g?
GeneralSET QUOTED_IDENTIFIERmemberVEMS10 Jan '07 - 9:49 
I noticed that if I open some procedure with SQL Enterprise Manager, Visual Studio, or Query commander it ignores these first 4 lines:
 
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 
ALTER PROCEDURE [dbo]..........
 
If I save at this point; these lines wil be removed and in most cases the prodedure will fail.
 
I have found only Query Analyzer to show and save these statements.
 
Any comments on how and why this happens?

GeneralApplication Gives Error each timememberManish Chowdhary6 Nov '06 - 17:28 

File or assembly IBM.data.db2 or one of dependencies not found.
is the message i get every time i try to connect to sql server 2005.
 
is there any online version of this tool or any other tool written in asp net becasue i have a requirement to create an online query builder for sql server 2005.
any help is heartly welcome.
 
Regards,
 
Manish Chowdhary
Software Engineer
Acusis Software India Pvt. Ltd,
Bangalore - 560027
Email: manish.chowdhary@acusis.com
Who is there? me, me who? i am me and you are you, you take my pronoun and we are us ..... letz celebrate one world

QuestionDoes anyone know of a visual SQL editor?memberPaul Touzel13 Jun '06 - 2:16 
Hi
 
This looks really good, but what I'm really looking for is a visual SQL editor that lets a user visually pick columns from a table.
 
If anyone has ever used the "Design View" in Enterprise Manager then that's the sort of thing I'm looking for.
 
Does anyone know of anything, preferably written in .NET?
 
Thanks
 
Paul.
GeneralChanging default portmembere1e0n2 Mar '06 - 4:28 
Just installed it and tried to connect to remote SQL Server 2000.
Connection could not be established and I am using not default port (firewall blacks default SQL Server port). Not sure if it possible to set port in server address like sqlserverhost:PORTNUMBER.
Can you confirm it? I can connect to that server using ODBC connection in my programm. How can I do this in QC?
 
Thanks a lot!
Leo
GeneralRe: Changing default portmembere1e0n2 Mar '06 - 5:09 
Hm for some reason it didn't work from the begining, then at some point started to work. Though SQL Client didn't work properly (doesn't show query's results), but throught OLE DB provider works fine.
Great tool!
 
Leo
GeneralHELP ME!PLEASEmemberAxiao790128 Feb '06 - 8:18 
I CAN'T DOWNLOAD QueryCommander SQL Editor ,I NEED IT VERY MUCH?
PLEASE HELP ME!
GeneralRe: HELP ME!PLEASEmemberDiamond118 Jun '06 - 22:10 
You can link to:
http://prdownload.sourceforge.net/querycommander
 
Good luck !!!
 
11
Questionwhich tools you use to make your pictures like your post in this page?membersilas_yao22 Feb '06 - 17:23 
which tools you use to make your pictures like your post in this page?
thx;P
 
silas
MCSE 1999
AnswerRe: which tools you use to make your pictures like your post in this page?memberwmmihaa12 Aug '06 - 11:05 
SnaggIt
GeneralSuggestion to add stored procedure generationmemberManish A Pansiniya2 Jan '06 - 19:57 
You did a great job by creating QueryCommander SQL Editor.
 
I want a feature to create add/delete/select/selectall/selectbyfkey stored procedure when i right click on any table.
 
Could this possible?
 
Thank you,
Manish Pansiniya
GeneralRe: Suggestion to add stored procedure generationmemberManish Pansiniya13 Dec '06 - 5:29 
I think you should give facility to add stored procedure as i said but you have not given any input to me. Please let me know if this is possible.
 
http://maniish.wordpress.com[^]
 
*************************************************
Great Mind Have Great Question.
Superb Mind Have Even Great Answer.
Please Reply With Proper Answer.
 
Manish.
------------
\||||||||/ |
???????? |
(*) (*) |
/\ |
=..= |
\____/ |
------------.
 
**************************************************

GeneralQueryCommander SQL Editor rocksmembercpsagman27 Nov '05 - 9:53 
This application is wonderful -- I installed it for use with SQL Server 2005 Express Edition and it is a good substitute for Query Analyzer. Great job, guys -- I hope to contribute something to the development effort.
GeneralGreat appmemberkin3tik20 Nov '05 - 20:34 
This is exactly what i am looking for. I can do work in one ide for mysql and MSSQL all at the same time. My PC thanks you *G*.
Had to recompile from source since the query editor windows have an annoying tendency to undock and float if you double click the header by accident
GeneralQC 4.0 is not working..:(memberKelraad4 Oct '05 - 3:17 
Hi, i just downloaded from SF.NET the latest version.
i start QC and set an entry for the local msde server and i get an error:
 
"Sql Server does not exist or access denied"
stack:
 
at QueryCommander.FrmDBObjects.RefreashTreeView()
at QueryCommander.MainForm.PopulateDBConnections()
 

i tried to start first the server but with no success..
 
if I press "Continue" and try to select one of the New, Open, Save buttons i get this error:
 
Index was out of range. [..] parameter name:index
 
the stack:
 
at System.Collections.ArrayList.get_Item(Int32 index)
at QueryCommander.MainForm.NewQueryform()
at QueryCommander.MainForm.menuItemNew_Click(Object sender, EventArgs e)
at QueryCommander.MainForm.toolBar_ButtonClick(Object sender, ToolBarButtonClickEventArgs e)
at System.Windows.Forms.ToolBar.OnButtonClick(ToolBarButtonClickEventArgs e)
at System.Windows.Forms.ToolBar.WmReflectCommand(Message& m)
at System.Windows.Forms.ToolBar.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
 
if I press "Continue" nothing happens, i must close the dialog from the top-right 'x' button
 
what the heck is this...? Cry | :((
GeneralRe: QC 4.0 is not working..:(memberwmmihaa12 Aug '06 - 11:10 
Try using it on a different database server, to see it you get the same exception. If you don't, make sure you use the right username/password/server. You might also try using an IP address instead of servername.
GeneralOracle IssuememberJC@Rio29 Sep '05 - 3:00 
Hi,
 
whenever i try to run a query i got the following message:
 
Server message
ORA-1005: null password provided; logon denied
 
Any clue?
 

 
[]'s Claudio
GeneralRe: Oracle IssuesussPavel Riedl4 Oct '05 - 0:45 
Hi,
I have this problem too.
 
PaRi
GeneralRe: Oracle Issuemembershaul_ahuva19 Oct '05 - 6:03 
In the QueryCommander project, FrmQuery.cs, ~line 1997 there is a block of code that executes the following SQL commands:
 
SET SHOWPLAN_ALL OFF
SET NOEXEC OFF
SET STATISTICS IO ON
 
I received the following error message for all three commands when run via ODP.NET:
 
ORA-00922: missing or invalid option
 
To get around this, I changed the code from:
 
db.ExecuteCommand("SET SHOWPLAN_ALL OFF\nGO", dbConnection, this.DatabaseName);
db.ExecuteCommand("SET NOEXEC OFF\nGO", dbConnection, this.DatabaseName);
//SQLstring = "SET SHOWPLAN_ALL OFF\nGO\nSET NOEXEC OFF\nGO\n" + SQLstring;
 
// RunWithIOStatistics hits the user about none efficient queries
if(_settings.Exists() && SQLstring.IndexOf("SHOWPLAN_ALL ON") <= 0)
{
if(_settings.RunWithIOStatistics && GetObjectName().Length==0)
SQLstring = "SET STATISTICS IO ON\n" + SQLstring + "\nSET STATISTICS IO OFF";

 
to:
 
if (db.GetType() is QueryCommander.Database.Microsoft.Sql2000.DataManager || db.GetType() is QueryCommander.Database.Microsoft.Sql2000.OleDbDataManager)
{
db.ExecuteCommand("SET SHOWPLAN_ALL OFF\nGO", dbConnection, this.DatabaseName);
db.ExecuteCommand("SET NOEXEC OFF\nGO", dbConnection, this.DatabaseName);
//SQLstring = "SET SHOWPLAN_ALL OFF\nGO\nSET NOEXEC OFF\nGO\n" + SQLstring;
 
// RunWithIOStatistics hits the user about none efficient queries
if(_settings.Exists() && SQLstring.IndexOf("SHOWPLAN_ALL ON") <= 0)
{
if(_settings.RunWithIOStatistics && GetObjectName().Length==0)
SQLstring = "SET STATISTICS IO ON\n" + SQLstring + "\nSET STATISTICS IO OFF";
}
}

 
Since the above commands are NOT supported by Oracle, the provider throws an exception which stops the query from running.
GeneralRe: Oracle IssuememberJoshua_C#12 Feb '09 - 19:45 
Claudio,
It appears that after each Connection.Open , the OracleConnection class leaves out the password field.Note that in the Mainform, we actually iterate the datasource collection and open it to set IsConnected property as true for the DBConnection class.
 
Now, it also appears that when we build the command and run it directly, we get this error that u got. However, if you try it with an Oracle data adapter and dataset as in ExecuteCommand_DataSet1 methid on DataManager for Oracle Class, things work just fine...I also noticed a private member m_connectionstring that appears to persist the correct connection string which is probably used by the OracleCommandBuilder class...
QuestionAnd Intellissense in other servers?membersilverius28 Sep '05 - 0:34 
Can I see intellissense when I access to other servers?
 
For example from Server1

Server2.[List intellisense with list databases]
AnswerRe: And Intellissense in other servers?memberMikael Håkansson28 Sep '05 - 3:57 
I assume you mean database (at least if you are using MSSql). Either way the answer is no. You need to [USE]a specific database in order for the IntelliSense to work. In other words:
 
(usign Database1)
SELECT *
FROM Database1..Customer c
JOIN Database2..Order o
WHERE c.[IntelliSence will work] ....
AND o.[IntelliSence will NOT work]....
 
To "use" a database simply right-click on the database in the Server Explorer and click "Use database".
 
Mikael Håkansson
GeneralRe: And Intellissense in other servers?memberBob Trudeau5 Oct '05 - 7:36 
I just downloaded and installed Query Commander 4.0.0.0 on my Windows XP SP2 laptop. After defining a server I right-clicked on the server and selected "Use database". When I begin typing a SELECT statement I pressed CTRL+Space after the first few letters of the table name. A list of matching tables appeared and I selected the desired table and gave it an alias as shown in the example. In there WHERE clause I typed a "." after the table alias and expected to see Intellisense from which to choose a field. It didn't appear. Typing Ctrl+Space brought up Intellisense for three SQL constructs (i.e., "CREATE PROC", "Cursor READ_ONLY..." and "SELECT...") but no field information. I tried again without the table alias but got the same results.
 
Do I need to do anything else to enable display of the field list via Intellisense?
 
Bob Trudeau
GeneralApplication crashes on replacememberVertyg027 Sep '05 - 10:06 
When i try to replace "[" with something it just crashes :/
Great tool really but since I cant use "SELECT [FIELDS] FROM" and replace "[" or "]" I`m back to Query Analyser ;/
GeneralRe: Application crashes on replacememberMikael Håkansson27 Sep '05 - 19:32 
This is a known bug in the earlier releases. To my knowlage this should be fixed in the 4.0 release. Which version are you using?
 
Mikael Håkansson
GeneralRe: Application crashes on replacememberVertyg027 Sep '05 - 22:15 
Well i downloaded 4.0.0 when i saw this post on cp, and clicked the top link
QueryCommander_4.0.0.0.msi
GeneralRe: Application crashes on replacememberMikael Håkansson27 Sep '05 - 22:17 
Confirmed! THe problem will be fixed in the upcomming release, hopefully within a week.
Thank you
 
Mikael Håkansson
GeneralRe: Application crashes on replacememberVertyg028 Sep '05 - 2:36 
Just fast fix untill you`r next release insert
pattern=pattern.Replace("[","\\[");
before regex = new Regex(pattern); in search form.

GeneralScreen &quot;real estate&quot; and other suggestionssussTony J. Vites9 Aug '05 - 3:13 
First let me say that this is a terrific and very useful app. much better than SQL Analzyer in many respects.
 
Is there a reason why the toolbar takes up two lines, uses large buttons and takes up valuable real estate in version 3.0.0.31? Your previous version 3.0.0.29 only took up one line. I believe the second line buttons; Enterprise Manger, Query Analyzer and SQL Profiler could simply be menu items under Tools. You have 2 of these there already. Another nice feature would be to allow saving tabs as spaces when saving a file. Also, warning the user to save a changed source SQL Statement before exiting would help.
 
A little history. You may be aware that a similar tool as yours was developed for Oracle databases called TOAD (I think it was known as The Oracle Application Developer) as a free downloadable tool back in 1998 - it had intellisense, ability to update table data from the output grid, etc. It was vastly superior to Oracle's SQL Plus and was a boon to developers and DBAS.
 
Thank you for all your efforts.Smile | :)
GeneralRe: Screen "real estate" and other suggestionsmemberMikael Håkansson9 Aug '05 - 5:38 
Thanks a lot. I’ll remove these buttons in next release.
I’m aware of toad, however it only works for Oracle, while we try to support Microsoft Sql, MySql, Oracle, DB2 and FireBird.
 
Please post your sugestions to our SourceForge site:
QueryCommander Feature Requests[^]
 
Mikael Håkansson
GeneralRe: Screen &quot;real estate&quot; and other suggestionsmemberLindsey Lewis28 Sep '05 - 4:50 
FYI, TOAD is no longer free. A company by the name of Quest Software now sells it. They do have a MS SQL Beta version which does not support source control where as the new version of Query Commander does;).
 
The highest sounds are hardest to hear.
Going forward is a way to retreat.
Great talent shows itself late in life.
Even a perfect program still has bugs.
GeneralSetup For MySQLmembercomputerguru9238230 Jul '05 - 6:27 
I really like QueryCommander. It looks like a very useful tool. I use both MSDE and MySQL. I can work with MSDE(MS SQL) fine, but how do I set up QueryCommander for MySQL?
 
Paul
GeneralRe: Setup For MySQLmemberMikael Håkansson31 Jul '05 - 12:47 
1. In the "Data sources" dialog click "New".
2. To set up a database connection for MySQL, select "MySQL Client" as connection type.
3. Fill in additional properties, and you are ready to go.
 
//Mikael Håkansson

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 27 Sep 2005
Article Copyright 2005 by Mikael Håkansson
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid