Click here to Skip to main content
Licence CPOL
First Posted 18 Apr 2005
Views 169,019
Downloads 6,013
Bookmarked 74 times

Enumerate SQL Server Instances in C#, Using ODBC

By | 18 Apr 2005 | Article
An article on enumerating SQL Server instances in C# using ODBC thus removing any dependancy on SQLDMO. Based on the C++ article by Santosh Rao.
 
Part of The SQL Zone sponsored by
See Also

Sample Image - C#SQLInfoEnumeratorDemo.jpg

Introduction

This article describes a C# class that utilises ODBC (SQLBrowseConnect) to obtain a list of SQL Servers on a network and returns an array of instances. If an instance is supplied with a valid username/password, then a list of all the databases on the instance is returned.

Background

I needed a way to obtain a list of SQL Server instances without using SQLDMO. I found a C++ implementation of the SQLBrowseConnect by Santosh Rao. This is a C# implementation.

Using the code

In order for the code to work, ODBC must be installed on your machine. Nearly all Microsoft Operating Systems have this installed. I have only tested this on Windows 2000 and XP. In order to use this, add a reference to the SQLEnumerator.cs file. The class is in the Moletrator.SQLDocumentor namespace and is SQLInfoEnumerator. The important work is done in the RetrieveInformation method. This calls the relevant ODBC commands passing in the relevant values. The important item is the value of inputParam. If this is blank then nothing is returned. When it contains a valid driver (DRIVER=SQL SERVER for MS SQL Server), it will check for all instances of this driver on the network returning a string value which is then parsed.

If this string is expanded to include a valid SQL Server instance and a valid username/password, then a list of all the databases on the server instance is returned. If the username/password are not valid then the a list of SQL Server instances is returned:

  1. In order to get a list of SQL Server instances, create an instance of the class and call EnumerateSQLServers. The example below adds the list of SQL Servers to a list box SQLListBox.
    SQLInfoEnumerator sie = new SQLInfoEnumerator();
    SQLListBox.Items.AddRange(sie.EnumerateSQLServers());
  2. To get a list of databases on a SQL Server instance, use the code below. The SQL Server instance is the selected instance from the list box populated in sample A. The username/password are entered by the user.
    SQLInfoEnumerator sie = new SQLInfoEnumerator();
    sie.SQLServer = listboxSQLServerInstances.SelectedItem.ToString(); 
    sie.Username = textboxUserName.Text;
    sie.Password = textboxPassword.Text;
    SQLListBox.Items.AddRange(sie.EnumerateSQLServersDatabases());

The demo code contains a full GUI with an example on how to call each of the above methods.

History

18 April 2005 1:00 p.m. - Initial write.

License

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

About the Author

earmitage

Web Developer

Ireland Ireland

Member



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. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 2 Pinmembergggustafson3:26 4 Mar '11  
GeneralVery good article PinmemberYanela Somdaka22:49 12 Jan '10  
AnswerFinding SQL2005/2008-servers PinmemberJonas Hammarberg2:51 16 May '09  
GeneralEven more simplified Pinmembervsoft5:16 22 Oct '08  
GeneralRe: Even more simplified PinmemberMember 438474517:51 28 Dec '08  
GeneralRe: Even more simplified PinmembervishalMGiri17:56 28 Dec '08  
GeneralGreat... Pinmemberd00_ape23:10 31 Jul '08  
GeneralLicense Pinmemberdavidm9919:39 25 Jul '08  
GeneralRe: License Pinmemberearmitage8:36 12 Dec '08  
QuestionProblem in finding datbases Pinmemberkssknov3:59 10 Apr '08  
GeneralGreat Work indeed ! Pinmemberram kumar 202120:37 12 Sep '07  
GeneralThanks. PinmemberEric Groise5:46 23 May '07  
GeneralSQL-Server 2000 Enterprise ODBC Creation error PinmemberCh. Kaleem21:02 5 Sep '06  
Generaldetecting named msde instances Pinmemberrajeshatsrin20:56 22 Aug '06  
GeneralInstances are sometimes not enumerated PinmemberWenxiang Tao7:49 25 May '06  
GeneralRe: Instances are sometimes not enumerated Pinmemberrajeshatsrin21:00 22 Aug '06  
GeneralRe: Instances are sometimes not enumerated PinmemberMast3rMind5:59 17 Jan '07  
GeneralEnumerate SQL Server Instances in C#, Using ODBC PinmemberGodfather3222:38 15 May '06  
QuestionInstances? Pinmembermirano11:25 19 Jan '06  
AnswerRe: Instances? PinmemberAlexander Stromer1:18 29 Mar '06  
JokeEXCELENT!!! PinmemberXTonos13:08 16 Jan '06  
GeneralSQLBrowseConnect PinmemberHimmett11:37 26 Sep '05  
Questionmanipulating server? PinmemberUnruled Boy17:25 19 Jun '05  
AnswerRe: manipulating server? Pinmemberdon!marco22:40 28 Jun '05  
Hi,
I had the same problem. It's really simple to solve:
 
first you have to add the 'System.ServiceProcess' link to your project.
Than you can use
ServiceController[] services = ServiceController.GetServices();
and search the services for service.ServiceName == 'MSSQLSERVER'
 
If you have ound it, you can use Start(), Stop() ... (look at the help files for 'ServiceController' to see the possibilities)
 
that's it.
 
I'm not sure how the SqlServer service is named, when there are running multiple instances, but that should possible to find out.
 
Have a good work Wink | ;)
GeneralTrusted Connections and invalid logins PinmemberGaandu14:42 9 Jun '05  

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120528.1 | Last Updated 19 Apr 2005
Article Copyright 2005 by earmitage
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid