// *************************************************************************** // Copyright (C) 1991-2002 SQLDev.Net // // $BeginHeader$ // // @file@: CreateDB.cpp // @author@: Gert E.R. Drapers (GertD@SQLDev.Net) // @description@: Example SQL-DMO Create Database // @remarks@: // @created@: 2002-12-30 // @lastsaved@: 2002-12-30 // // update history: // @version@ @initials@ @updatedate@ @release@ @description@ // 00001 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); extern "C" INT wmain(INT argc, WCHAR** argv, WCHAR** envp); INT wmain(INT argc, WCHAR** argv, WCHAR** envp) { HRESULT hr; LPWSTR lpDB; if (argc != 2) { return(0); } lpDB = argv[1]; // initialize COM // if FAILED(hr = CoInitialize(NULL)) { wprintf(TEXT("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)) { wprintf(TEXT("CoCreateInstance Failed\n")); return (0); } pSQLServer->SetLoginTimeout(10); // connect to SQL Server // if FAILED(hr = pSQLServer->Connect(TEXT(""),TEXT("sa"),TEXT(""))) { DisplayDMOError(hr, pSQLServer); } else { // drop database if exists // { LPSQLDMODATABASE pDatabase = NULL; if SUCCEEDED(hr = pSQLServer->GetDatabaseByName(lpDB, &pDatabase)) { pDatabase->Remove(); } if (pDatabase) { pDatabase->Release(); } } // create database // { // initialize DBFile object // LPSQLDMODBFILE pDBFile = NULL; if FAILED(hr = CoCreateInstance(CLSID_SQLDMODBFile, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMODBFile, (LPVOID*)&pDBFile)) { wprintf(TEXT("CoCreateInstance Failed\n")); return (0); } pDBFile->SetName(TEXT("TestData")); pDBFile->SetPhysicalName(TEXT("c:\\testdata.mdf")); pDBFile->SetSize(5); pDBFile->SetFileGrowthType(SQLDMOGrowth_Percent); pDBFile->SetFileGrowth(10); pDBFile->SetMaximumSize(100); pDBFile->SetPrimaryFile(TRUE); // initialize LogFile object // LPSQLDMOLOGFILE pLogFile = NULL; if FAILED(hr = CoCreateInstance(CLSID_SQLDMOLogFile, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMOLogFile, (LPVOID*)&pLogFile)) { wprintf(TEXT("CoCreateInstance Failed\n")); return (0); } pLogFile->SetName(TEXT("TestLog")); pLogFile->SetPhysicalName(TEXT("c:\\testdata.ldf")); pLogFile->SetSize(5); pLogFile->SetFileGrowthType(SQLDMOGrowth_Percent); pLogFile->SetFileGrowth(10); pLogFile->SetMaximumSize(100); // initialize Database object // LPSQLDMODATABASE pDatabase = NULL; if FAILED(hr = CoCreateInstance(CLSID_SQLDMODatabase, NULL, CLSCTX_INPROC_SERVER, IID_ISQLDMODatabase, (LPVOID*)&pDatabase)) { wprintf(TEXT("CoCreateInstance Failed\n")); return (0); } pDatabase->SetName(lpDB); // add DBFile to DBFiles collection, in PRIMARY FileGroup // LPSQLDMOFILEGROUPS pFileGroups = NULL; hr = pDatabase->GetFileGroups(&pFileGroups); LPSQLDMOFILEGROUP pFileGroup = NULL; hr = pFileGroups->GetItemByName(TEXT("PRIMARY"), &pFileGroup); LPSQLDMODBFILES pDBFiles = NULL; hr = pFileGroup->GetDBFiles(&pDBFiles); if FAILED( hr = pDBFiles->Add(pDBFile) ) { DisplayDMOError(hr, pSQLServer); } // add LogFile to LogFiles collection of TransactionLog // LPSQLDMOTRANSACTIONLOG pTransactionLog = NULL; hr = pDatabase->GetTransactionLog(&pTransactionLog); LPSQLDMOLOGFILES pLogFiles = NULL; hr = pTransactionLog->GetLogFiles(&pLogFiles); if FAILED( hr = pLogFiles->Add(pLogFile) ) { DisplayDMOError(hr, pSQLServer); } // add Database to Database collection, this creates the // data and log devices and the actual new database // LPSQLDMODATABASES pDatabases = NULL; hr = pSQLServer->GetDatabases(&pDatabases); if FAILED( hr = pDatabases->Add(pDatabase) ) { DisplayDMOError(hr, pSQLServer); } // release all objects // pFileGroups->Release(); pFileGroup->Release(); pDBFiles->Release(); pDBFile->Release(); pTransactionLog->Release(); pLogFiles->Release(); pLogFile->Release(); pDatabases->Release(); pDatabase->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); wprintf(TEXT("%s returned error %d: %s\n"), strSource, SCODE_CODE(hr), strDescription); pEI->Release(); } } else { wprintf(TEXT("Error %d\n"), HRESULT_CODE(hr)); } pSEI->Release(); }