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

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;

    intiExitStatus = 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;
    }
Propriedades

ID do Artigo: 287737 - Última Revisão: 10 de jul de 2008 - Revisão: 1

Comentários