天天看點

資料庫備份與還原的C#實作

  上周要寫一個SQL-SERVER資料庫備份還原的程式,很沒有思路,隻是記得上學的時候用過SQL語句來完成資料庫的備份還原,其餘的方式還沒有嘗試過。經過資料查找終于找到了解決方案,效果還不錯,于是寫下來一起分享。 大家最常見的是使用sql指令來進行資料庫備份, 最常用的sql語句如下: backup  [dbname]   to   disk=[路徑+檔案名] restore  [dbname]   from   disk=[路徑+檔案名]   另外可以使用SQLDMO來實作資料庫備份的功能 SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象)封裝 Microsoft SQL Server 2000 資料庫中的對象。SQL-DMO 允許用支援自動化或 COM 的語言編寫應用程式,以管理 SQL Server 安裝的所有部分。SQL-DMO 是 SQL Server 2000 中的 SQL Server 企業管理器所使用的應用程式接口 (API);是以使用 SQL-DMO 的應用程式可以執行 SQL Server 企業管理器執行的所有功能。 在ASP.NET2005中要使用SQLDMO.DLL,首先要注冊這個元件。 注冊 SQLDMO.DLL 元件的步驟: 1.“項目”——>“添加引用”——>“COM”——>“SQLDMO.DLL”這樣就可以注冊SQLDMO.DLL元件。 2.把在C:/Program Files/Microsoft SQL Server/80/Tools/Binn目錄下的動态連結庫SQLDMO.DLL檔案。 3. 把DLL檔案持拷貝到C:/WINDOWS/system32目錄下 4. 在C:/WINDOWS/system32目錄下建立一個新檔案夾:resources,在裡面再建一個新檔案夾2052,然後把RLL檔案拷貝到2052中.即放在C:/WINDOWS/system32/resources/2052目錄中 5.注冊:在開始>>運作>>(輸入)Regsvr32 C:/Program Files/Microsoft SQL Server/80/Tools/Binn/sqldmo.dll 回車。   注冊過SQLDMO.DLL元件後,在C#中使用這個元件來進行開發的方式有點不同。 在 C# 的 Web 程式中使用這個元件,要在“解決資料總管”中添加上SQLDMO.DLL元件的引用。然後在項目的命名空間中添加“using SQLDMO;”命名空間的引用,完成以上操作就可以在 Web項目中使用這個元件了。 具體步驟:選中“解決資料總管”的項目,右鍵,“添加引用”,然後在COM選項中選擇SQLDMO.DLL元件進行添加。 在Windows項目中就不需要這麼麻煩,隻要完成SQLDMO.DLL元件的步驟的注冊步驟,直接在Windows程式中可以添加此引用“ using SQLDMO;”,就可以直接使用這個元件。 下面是用C#語言寫的備份和恢複Microsoft SQL Server資料庫的實作方式: (提醒:首先要注冊 SQLDMO.DLL 元件。 在WEB程式中使用 SQLDMO.DLL 元件,要添加SQLDMO.DLL的引用;在 Windows 項目中使用 SQLDMO.DLL 元件,注冊後直接添加 using SQLDMO; )      

  1. ///<summary>
  2.      /// 資料庫備份
  3. /// 參數資訊要備份的資料庫的名稱Backup .Database = "Northwind";
  4. /// 另外一個是存放備份檔案的路徑和檔案名稱Backup .Files = @"c:/databak.bak";
  5.      ///</summary>
  6.     private   void   Button1_Click(object   sender,   System.EventArgs   e)  
  7.       {
  8.            SQLDMO.Backup Backup  = new SQLDMO.BackupClass();
  9.            SQLDMO.SQLServer SQLServer = new SQLDMO.SQLServerClass();
  10.          try
  11.           {
  12.                SQLServer.LoginSecure = false;
  13.                SQLServer.Connect("IP", "USERNAME", "PWD");
  14.                Backup .Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMBackup _Database;
  15.                Backup .Database = "Northwind";//要備份的資料庫的名稱,例如Northwind
  16.                Backup .Files = @"c:/databak.bak";//存放路徑,和備份檔案的名稱
  17.                Backup .BackupSetName = "Northwind";
  18.                Backup .BackupSetDescription = "資料庫備份";
  19.                Backup .Initialize = true;
  20.                Backup .SQLBackup(SQLServer);
  21.           }
  22.          Catch(Exception ex)
  23.           {
  24.               Throw ex;
  25.           }
  26.           finally
  27.           {
  28.                SQLServer.DisConnect();
  29.           }
  30.       }
  31.      ///<summary>
  32.      /// 資料庫恢複
  33. /// 參數資訊要恢複的資料庫的名稱Restore .Database = "Northwind_Res";
  34. /// 另外一個是存放資料庫備份檔案的路徑和檔案名稱
  35. /// Backup .Files = @"c:/databak.bak";用來恢複資料庫
  36.      ///</summary>
  37.     private   void   Button2_Click(object   sender,   System.EventArgs   e)
  38.       {
  39.            SQLDMO.Restore Restore  = new SQLDMO.RestoreClass();
  40.            SQLDMO.SQLServer SQLServer = new SQLDMO.SQLServerClass();
  41.          try
  42.           {
  43.                SQLServer.LoginSecure = false;
  44.                SQLServer.Connect("IP", "USERNAME", "PWD");
  45.                Restore .Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMRestore _Database;
  46.                Restore .Database = "Northwind_Res";
  47.                Restore .Files = @"C:/ databak.bak";
  48.                Restore .FileNumber = 1;
  49.                Restore .ReplaceDatabase = true;
  50.                Restore .SQLRestore(SQLServer);
  51.           }
  52.          catch(Exception ex)
  53.           {
  54.               Throw ex;
  55.           }
  56.           finally
  57.           {
  58.                SQLServer.DisConnect();
  59.           }
  60.       }
  61. }

其實這種方式是調用SQL-SERVER資料庫自帶的資料備份功能,這個功能是使用上面說過是兩個sql語句,隻不過是形成了存儲過程的形式。在SQL-SERVER系統中有這兩個SQL指令生成的存儲過程,如下。 backup  [dbname]   to   disk=[ 路徑 + 檔案名 ] restore  [dbname]   from   disk=[ 路徑 + 檔案名 ]