How to enumerate available instances of SQL Server by using the SQLDMO components (287737)



The information in this article applies to:

  • Microsoft SQL Server 7.0
  • Microsoft SQL Server 2000 (all editions)
  • Microsoft Visual Basic Enterprise Edition for Windows 5.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup

This article was previously published under Q287737

SUMMARY

By using SQL Server Distributed Management Objects (SQLDMO), all running SQL Servers on a local network segment can be listed.

MORE INFORMATION

To enumerate all available SQL Servers on the local network segment, follow the steps below.

Using Visual Basic

  1. Start a new Standard EXE project.
  2. On the Project menu, click References. Select Microsoft SQLDMO Object library, and then click OK.
  3. Place a CommandButton and a ListBox control on Form1.
  4. Add the following code to the form's module:
    Private Sub Command1_Click()
        Dim i As Integer
        Dim oNames As SQLDMO.NameList
        Dim oSQLApp As SQLDMO.Application
        Set oSQLApp = New SQLDMO.Application
       
        
        Set oNames = oSQLApp.ListAvailableSQLServers()
        List1.Clear
        For i = 1 To oNames.Count
            List1.AddItem oNames.Item(i)
        Next i
    End Sub
    					

Using Visual C++

  1. Start a new, empty Win32 Console Application.
  2. Add a new C++ source file to the project and paste the following code:
    #define UNICODE
    #define _UNICODE
    
    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <initguid.h>
    
    #include "C:\PROGRAM FILES\MICROSOFT SQL SERVER\80\TOOLS\DEVTOOLS\INCLUDE\sqldmoid.h"
    #include "C:\PROGRAM FILES\MICROSOFT SQL SERVER\80\TOOLS\DEVTOOLS\INCLUDE\sqldmo.h"
    
    int main()
    {
    	LPSQLDMOAPPLICATION pDMOApp = NULL;
    	LPSQLDMONAMELIST pNameList = NULL;
    
    	int	iExitStatus = 1;	// assume failure.
    
    	try
    	{
    		// Initialize COM.
    		// 
    		if FAILED(CoInitialize (NULL))
    		{
    			return (iExitStatus);
    		}
    
    
    		// Create SQLDMOApplication.
    		if FAILED(CoCreateInstance(CLSID_SQLDMOApplication, NULL, CLSCTX_INPROC_SERVER, IID_IWSQLDMOApplication, (LPVOID*)&pDMOApp))
    		{
    			return (iExitStatus);
    		}
    	
    		// Get the list of servers.
    		if SUCCEEDED(pDMOApp->ListAvailableSQLServers(&pNameList))
    		{
    			long lCount=0;
    			BSTR strName=NULL;
    			//retrieve the count 
    			pNameList->GetCount(&lCount);
    			_tprintf(_T("There are %d SQL Servers active on the network.\n"),lCount );
    
    			for(long i=0; i < lCount; i++)
    			{
    				//get the server name
    				pNameList->GetItemByOrd(i, &strName);
    				_tprintf(_T("%s\n"),strName );
    			}
    			iExitStatus = 0;
    		}
    
    		if (pDMOApp)
    		{
    			pNameList = NULL;
    			pDMOApp->Release();
    			pDMOApp = NULL;
    		}
    	}
    	catch(...)
    	{
    		_tprintf(TEXT("error dmolistservers unhandled exception (%d)\n"), GetLastError() );
    	}
    
    	return iExitStatus;
    }
    					

Modification Type:MajorLast Reviewed:12/23/2005
Keywords:kbhowto kbinfo KB287737