// *************************************************************************** // Copyright (C) 1991-2002 SQLDev.Net // // $BeginHeader$ // // @file@: EnumDB.cpp // @author@: Gert E.R. Drapers (GertD@SQLDev.Net) // @description@: Example SQL-DMO Enumerate Databases // @remarks@: // @created@: 2002-12-30 // @lastsaved@: 2002-12-30 // // update history: // @version@ @initials@ @updatedate@ @release@ @description@ // 00000 GED 2002-12-30 v1.0.0.0 created // // @EndHeader@ // *************************************************************************** #define STRICT #define WIN32_LEAN_AND_MEAN #define INC_OLE2 #define UNICODE #define _UNICODE #include #include #include #include #include VOID DisplayDMOError(HRESULT hr, LPSQLDMOSERVER pSQLServer); INT _tmain(INT argc, TCHAR* argv[], TCHAR* envp[]) { HRESULT hr; // initialize COM // if FAILED(hr = CoInitialize(NULL)) { _tprintf(_T("CoInitialize Failed\n")); return(0); } // initialize SQLServer object // LPSQLDMOSERVER pSQLServer = NULL; if FAILED(hr = CoCreateInstance(CLSID_SQLDMOServer, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMOServer, (LPVOID*)&pSQLServer)) { _tprintf(_T("CoCreateInstance Failed\n")); return (0); } pSQLServer->SetLoginTimeout(10); pSQLServer->SetLoginSecure(TRUE); // connect to SQL Server // if FAILED(hr = pSQLServer->Connect(_T("(local)\\dev"), NULL, NULL) ) { DisplayDMOError(hr, pSQLServer); } else { LPSQLDMODATABASES pDatabases = NULL; LPSQLDMODATABASE pDatabase = NULL; LONG lCount = 0; SQLDMO_BSTR strDB; pSQLServer->GetDatabaseCount(&lCount); hr = pSQLServer->GetDatabases(&pDatabases); for (LONG i = 0; i < lCount; i++) { pDatabases->GetItemByOrd(i, &pDatabase); pDatabase->GetName(&strDB); pDatabase->Release(); _tprintf(_T("database %s\n"), strDB); } SysFreeString((BSTR)strDB); pDatabases->Release(); } // disconnect and release SQLServer object // pSQLServer->DisConnect(); pSQLServer->Release(); // shutdown COM // CoUninitialize(); return(0); } VOID DisplayDMOError(HRESULT hr, LPSQLDMOSERVER pSQLServer) { LPSUPPORTERRORINFO pSEI = NULL; if SUCCEEDED(pSQLServer->QueryInterface(IID_ISupportErrorInfo, (LPVOID*)&pSEI)) { if SUCCEEDED(pSEI->InterfaceSupportsErrorInfo(IID_ISQLDMOServer)) { LPERRORINFO pEI = NULL; GetErrorInfo(0, &pEI); SQLDMO_BSTR strDescription, strSource; pEI->GetDescription(&strDescription); pEI->GetSource(&strSource); _tprintf(_T("%s returned error %d: %s\n"), strSource, SCODE_CODE(hr), strDescription); pEI->Release(); } } else { _tprintf(_T("Error %d\n"), HRESULT_CODE(hr)); } pSEI->Release(); }