你可以到
C:\Program Files
\Microsoft SQL Server\80\Tools\Devtools\Samples\Sqldmo
下面有很好的EXAMPLE.

解决方案 »

  1.   

    #include "dmoping.h"// ************************************************************************ //
    // CDmoPing constructor - set all defaults
    // ************************************************************************ //
    CDmoPing::CDmoPing()
    : m_pServer(NULL), 
    m_pUser(NULL),
    m_pPassword(NULL),
    m_bIntegratedSec(FALSE),
    m_bVerbose(FALSE),
    m_eSQLVersion(SQLDMOSQLVer_Unknown)
    {
    }// ************************************************************************ //
    // CDmoPing destructor
    // ************************************************************************ //
    CDmoPing::~CDmoPing()
    {
    if (m_pServer)
    {
    delete [] m_pServer;
    m_pServer = NULL;
    } if (m_pUser)
    {
    delete [] m_pUser;
    m_pUser = NULL;
    } if (m_pPassword)
    {
    delete [] m_pPassword;
    m_pPassword = NULL;
    }
    }// ************************************************************************ //
    // PargeArgs - poor mans command argument parser
    // ************************************************************************ //
    BOOL CDmoPing::Parse(INT argc, TCHAR* argv[])
    {
    int i = 1; while (i < argc)
    {
    if (! IsArgDelimiter(argv[i]) )
    {
    goto Error;
    } switch (argv[i][1])
    {
      // server
      case 'S':
      GetArg(i, m_pServer, argc, argv);
      break;   // login ID
      case 'U':
      GetArg(i, m_pUser, argc, argv);
      break;   // password.
      case 'P':
      GetArg(i, m_pPassword, argc, argv);
      break;
      
      // integrated security
      case 'E':
      m_bIntegratedSec = TRUE;
      break;   // version
      case 'v':
      break;   // verbose mode
      case 'V':
      m_bVerbose = TRUE;
      break;   case '?':
      goto Usage;   default:
      goto Error;
    }
    i++;
    } return(TRUE);Error:
    _tprintf(TEXT("error dmoping argument (%d) %s\n\n"), i, argv[i] );Usage:
    _tprintf(TEXT("usage dmoping [-S] [-U -P | -E] [-V] [-v] [-?] \n"));
    _tprintf(TEXT("  -S server name, defaults to local server \n"));
    _tprintf(TEXT("  -U user name, defaults to sa \n"));
    _tprintf(TEXT("  -P password, defaults to \"\" (blank) \n"));
    _tprintf(TEXT("  -E integrated security, defaults to FALSE\n"));
    _tprintf(TEXT("  -V verbose mode, defaults to FALSE\n"));
    _tprintf(TEXT("  -? help and usage information\n")); return(FALSE);
    }// ************************************************************************ //
    // GetVersion - uses SQLDMO to determine the SQL Server version 
    // using pSQLServer->PingSQLServerVersion
    // ************************************************************************ //
    BOOL CDmoPing::GetVersion()
    {
    BOOL fRet = FALSE;
    LPSQLDMOSERVER pSQLServer = NULL;  if FAILED(CoCreateInstance(CLSID_SQLDMOServer, NULL, CLSCTX_INPROC_SERVER,
    IID_ISQLDMOServer, (LPVOID*)&pSQLServer))
    {
    return FALSE;
    } if SUCCEEDED(pSQLServer->PingSQLServerVersion(&m_eSQLVersion, m_pServer, m_pUser, m_pPassword))
    {
    fRet = TRUE;
    } if (pSQLServer)
    {
    pSQLServer->Release();
    pSQLServer = NULL;
    } return fRet;
    }// ************************************************************************ //
    // Ping - instantiate an SQLOLE or SQLDMO object based on the m_eSQLVersion
    //   connect to the server and retrieve the version information of
    //        SQLOLE/SQLDMO and the underlaying database layer DB-Library/ODBC
    // ************************************************************************ //
    BOOL CDmoPing::Ping()
    {
    LPSQLDMOSERVER pSQLServer; if FAILED(CoCreateInstance(CLSID_SQLDMOServer, NULL, CLSCTX_INPROC_SERVER,
            IID_ISQLDMOServer, (LPVOID*)&pSQLServer))
    {
    DisplayError();
    return(FALSE);
    } if (m_bIntegratedSec)
    {
    pSQLServer->SetLoginSecure(TRUE);
    } // If there is no input for the user ID, make it default to 'sa'.
    if (m_pUser == NULL)
      m_pUser=TEXT("sa"); if FAILED(pSQLServer->Connect(m_pServer, m_pUser, m_pPassword) )
    {
    DisplayError();
    delete pSQLServer;
    return(FALSE);
    } BSTR strVersion;
    pSQLServer->GetVersionString(&strVersion);
    _tprintf(_T("%s\n"), strVersion);
    SysFreeString(strVersion); BSTR strODBCVersion;
    LONG lSQLDMOVersion;
    LONG lSQLDMOVersionMajor;
    LONG lSQLDMOVersionMinor; LPSQLDMOAPPLICATION pApplication;

    pSQLServer->GetApplication(&pApplication);
    pApplication->GetVersionBuild(&lSQLDMOVersion);
    pApplication->GetVersionMajor(&lSQLDMOVersionMajor);
    pApplication->GetVersionMinor(&lSQLDMOVersionMinor);
    pApplication->GetODBCVersionString(&strODBCVersion); _tprintf(_T("SQL-DMO version %d.%d.%d\n"), 
    lSQLDMOVersion, lSQLDMOVersionMajor, lSQLDMOVersionMinor);
    _tprintf(_T("ODBC version %s\n"), strODBCVersion);

    SysFreeString(strODBCVersion); pSQLServer->DisConnect();

    return(TRUE);
    }// ************************************************************************ //
    // main
    // ************************************************************************ //
    INT _tmain(INT argc, TCHAR** argv, TCHAR** envp)
    {
    int iExitStatus = 1; // assume failure. try
    {
    // Initialize COM
    //
    if FAILED(CoInitialize (NULL))
    {
    return (iExitStatus);
    } CDmoPing* pPing = new CDmoPing(); if (FALSE == pPing->Parse(argc, argv) )
    {
    return (iExitStatus);
    } if (SQLDMOSQLVer_Unknown == pPing->GetSQLVersion() )
    {
    pPing->GetVersion();
    } pPing->Ping(); //delete pPing;

    CoUninitialize();

    iExitStatus = 0; // Success
    ...