Library tutorials & articles

Using SQL-DMO To Backup and Verify a Database

Getting Started

SQLDMO.SQLServer

The code for the SQLDMO.SQLServer object should look very familiar. It allows you to connect to a given SQL server using either SQL Server on Windows NT authentication. Take a look at the snippet below.

  <%
  
    Dim
   srv
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15
  srv.Connect "servername", "username", "password"
%>

This code creates a connection to SQL Server using SQL Server authentication. To login using NT authentication set the LoginSecure property to TRUE. This will cause the username and password parameters to be ignored and your NT login information will be used.

SQLDMO.Database

We will use the SQLDMO.Database object to get a list of databases from the server. This information is used to complete a backup request form in the sample application. The snippet below demonstrates using this object to populate a combo box.

  <%
  
    Dim
   srv
  Dim objDB
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15 
  srv.Connect "servername", "username", "password"
  Set objDB = Server.CreateObject("SQLDMO.Database")
%><SELECTname="fdatabase"><%For Each objDB In srv.Databases
    If objDB.SystemObject = FalseThen%><OPTION><%=objDB.Name%></OPTION><%End IfNext%></SELECT>

Comments

  1. 06 Jun 2005 at 11:11

    here  the solution for Backup the database in VC++:




    int backup::OnButton1()


    {
       HRESULT hr;
       if FAILED(hr = CoInitialize (NULL))
       {
           //_tprintf(TEXT("CoInitialize Failed\n"));
           return (0);
       }


       LPSQLDMOSERVER pSQLServer = NULL;


       if FAILED(hr = CoCreateInstance(
           CLSIDSQLDMOServer,
           NULL,
           CLSCTX
    INPROCSERVER,
           IID
    ISQLDMOServer,
           (LPVOID*)&pSQLServer))
       {
           //_tprintf(TEXT("CoCreateInstance Failed\n"));
           return (0);
       }


       pSQLServer->SetLoginTimeout(10);
       pSQLServer->SetLoginSecure(TRUE);
       
       if FAILED(hr = pSQLServer->Connect((L"ws-45"),(L"sa"),(L"")))
       {
           AfxMessageBox("Backup connection Failed");
           return DisplayError();
       }


       else
       {
           LPSQLDMODATABASES    pDatabases = NULL;
           LPSQLDMODATABASE    pDatabase = NULL;
           LPSQLDMOFILEGROUPS  pFileGroups = NULL;
           LPSQLDMOFILEGROUP    pFileGroup = NULL;
           LONG                lCount = 0;
           LPSQLDMODBFILE        ppDBFile = NULL;
           LPLONG                pRetVal = NULL;
           long    mdatasize;
           CString temp;
           
           float  m
    datasizeMB;
           CString datasize;


           SQLDMOBSTR        strDB;
       //    long *strDB;
       
    //        char* m
    str = new char[100];


           //pSQLServer->GetDatabaseCount(&lCount);


           hr = pSQLServer->GetDatabases(&pDatabases);


           for (LONG i = 0; i < 1; i++)
           {
               pDatabases->GetItemByOrd(i, &pDatabase);


               pDatabase->GetName(&strDB);
               
               pDatabase->Release();
               pDatabase->GetSpaceAvailableInMB(&m_datasizeMB);
               pDatabase->GetFileGroups(&pFileGroups);


           
               pDatabase->GetSize(&m_datasize);


           //    pDatabase->GetFileGroupByName(_T("DOTS"),&pFileGroup);
           //    pFileGroup->GetDBFileByOrd(0,&ppDBFile);


           //    temp = mdatasize;
               datasize.Format("%d",m
    datasize);
               temp.Format("%d",mdatasizeMB);
               SetDlgItemText(IDC
    EDIT1,datasize);
               //AfxMessageBox(datasize);
               
               //AfxMessageBox(temp);
               
               //    sprintf(mstr,"%lf",msize);


           
           
           //    wprintf(T("database %s"), strDB);
           //    wprintf(
    T(" Total size  %i \n"), msize);
           //    wprintf(
    T("Free space %lf \n"), m_sizeMB);
           }
           
                       
    }


       LPSQLDMOBACKUP pSQLBackup = NULL;


       if FAILED(hr = CoCreateInstance(
           CLSIDSQLDMOBackup,
           NULL,
           CLSCTX
    INPROCSERVER,
           IID
    ISQLDMOBackup,
           (LPVOID*)&pSQLBackup))
       {
       //    _tprintf(TEXT("CoCreateInstance Failed\n"));
           return (0);
       }


       LPCONNECTIONPOINTCONTAINER pMyConnectionPointContainer;
       LPCONNECTIONPOINT pMyConnectionPoint;


       CMyBackupSink* pMyBackupSink = new CMyBackupSink();
       pMyBackupSink->AddRef();
       
       if (!pMyBackupSink)
       {
           return(0);
       }


       DWORD dwCookie;


       // ask the connectable object (pSQLBackup) about its outgoing interface,
       // by using QI on IIDIConnectionPointContainer. If fails, this object
       // does not support outgoing interface
       //
       if FAILED(pSQLBackup->QueryInterface(
           IID
    IConnectionPointContainer,
           (LPVOID FAR*) &pMyConnectionPointContainer))
       {
           return DisplayError();
       }


       // find the specific outgoing interface IID_ISQLDMOBackupSink and retrieve
       // a pointer to the connectionpoint object. If fails, the object does not
       // support this outgoing interface


       if FAILED(pMyConnectionPointContainer->FindConnectionPoint(
           IID_ISQLDMOBackupSink,
           (LPCONNECTIONPOINT FAR*)&pMyConnectionPoint))
       {
           return DisplayError();
       }


       // establish the connection between the Sink and the ConnectionPoint object.
       // Retrieve a key (cookie) value for terminating the connection later. If
       // this fails, the Sink and ConnectionPoint object do not support the same interface
       
       if (S_OK != (hr = pMyConnectionPoint->Advise((LPUNKNOWN)pMyBackupSink, &dwCookie)))
       {
           return DisplayError();
       }


       if FAILED(hr = pSQLBackup->SetFiles((L"e:\test123.dmp") ))
       {
           return DisplayError();
       }


       if FAILED(hr = pSQLBackup->SetDatabase((L"dots")))
       {
           return DisplayError();
       }


    //    hr = pSQLBackup->EXEC sp_spaceused ;


       if FAILED(hr = pSQLBackup->SetTruncateLog(SQLDMOBackupLogTruncateOnly))
       {
           return DisplayError();
       }



     

  2. 29 Jan 2005 at 14:28

    Hi


    I tried your code, seems it is not working for remote database backup.
    do u have any update version for taking backups.


    thanks

  3. 01 Jan 1999 at 00:00

    This thread is for discussions of Using SQL-DMO To Backup and Verify a Database.

Leave a comment

Sign in or Join us (it's free).

AddThis

Related discussion

Related podcasts

  • Stack Overflow: Podcast #28

    This is the twenty-eighth episode of the StackOverflow podcast, where&#10;Joel and Jeff discuss Windows Azure, SQL Server 2008 full text search, Bayesian filtering, porn detection, and project management &mdash; among other things. &#10;&#10;Jeff met the inestimable Joey DeVilla aka Accordion Guy...

Related jobs

Events coming up

  • Jun 16

    Code Generation 2009

    Cambridge, United Kingdom

    A developer event with a practical focus on helping people get to grips with code generation tools and technologies.