天天看點

在C#中運用SQLDMO備份和恢複Microsoft SQL Server資料庫

SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象)封裝了Microsoft SQL Server資料庫中的對象。SQLDMO是Microsoft SQL Server中企業管理器所使用的應用程式接口,是以它可以執行很多功能,其中當然也包括對資料庫的備份和恢複。

      SQLDMO由Microsoft SQL Server自帶的SQLDMO.dll提供,由于SQLDMO.dll是一個COM對象,是以大家在用之前必須在.NET項目中添加對它的引用,如下圖所示:

下面是用C#語言書寫的用于Microsoft SQL Server資料庫備份和恢複的類:

using System;

namespace DbService
{
    /// <summary>
    /// DbOper類,主要應用SQLDMO實作對Microsoft SQL Server資料庫的備份和恢複
    /// </summary>
    public sealed class DbOper
    {
        /// <summary>
        /// DbOper類的構造函數
        /// </summary>
        private DbOper()
        {
        }

        /// <summary>
        /// 資料庫備份
        /// </summary>
        public static void DbBackup()
        {
            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
            try
            {
                oSQLServer.LoginSecure = false;
                oSQLServer.Connect("localhost", "sa", "1234");
                oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                oBackup.Database = "Northwind";
                oBackup.Files = @"d:/Northwind.bak";
                oBackup.BackupSetName = "Northwind";
                oBackup.BackupSetDescription = "資料庫備份";
                oBackup.Initialize = true;
                oBackup.SQLBackup(oSQLServer);
            }
            catch
            {
                throw;
            }
            finally
            {
                oSQLServer.DisConnect();
            }
        }

        /// <summary>
        /// 資料庫恢複
        /// </summary>
        public static void DbRestore()
        {
            SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
            try
            {
                oSQLServer.LoginSecure = false;
                oSQLServer.Connect("localhost", "sa", "1234");
                oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                oRestore.Database = "Northwind";
                oRestore.Files = @"d:/Northwind.bak";
                oRestore.FileNumber = 1;
                oRestore.ReplaceDatabase = true;
                oRestore.SQLRestore(oSQLServer);
            }
            catch
            {
                throw;
            }
            finally
            {
                oSQLServer.DisConnect();
            }
        }
    }
}