#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);
// 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
...