asp.net下實現資料庫的備份與恢複

來源:互聯網
上載者:User

WebDataBak.aspx.cs

 bakServer.cs為自訂類代碼

核心代碼:

1.

private void BtnDataBackup_Click(object sender, System.EventArgs e)
  {
   if ( lstDb.Items.Count == 0 )
   {
    pub.Alert("資料庫列表不可為空!", this.Page);
   }
   else if( txtInFile.Text =="" )
   {
    pub.Alert("備份檔案名稱不可為空!", this.Page);

   }
   else if( txtDbName.Text =="" || txtUserName.Text == "")
   {
    pub.Alert("資料庫,使用者不可為空!!",this.Page);

   }
   else
   {
    BtnDataRestore.Enabled = false;
    BtnQuery.Enabled = false;
    btnCear.Enabled = false;
    if ( baks.BackUPDB(lstDb.SelectedItem.ToString(),txtInFile.Text,txtDbName.Text,txtUserName.Text,txtPwd.Text) == true )
    {
     pub.Alert("備份成功!",this.Page);
    }
    else
    {
        pub.Alert("要備份的路徑錯誤不存在,請輸入正確路徑!!",this.Page);
    }
    BtnDataRestore.Enabled = true;
    BtnQuery.Enabled = true;
    btnCear.Enabled = true;
   }
  }

  private void BtnDataRestore_Click(object sender, System.EventArgs e)
  {
   //恢複資料庫
   if ( lstDb.Items.Count == 0 )
   {
    pub.Alert("資料庫列表不可為空!", this.Page);
   }
   else if ( txtOutFile.Text =="" )
   {
    pub.Alert("還原檔案名稱不可為空!", this.Page);
   
   }
   else if( txtDbName.Text =="" || txtUserName.Text == "")
   {
    pub.Alert("資料庫,使用者不可為空!!",this.Page);

   }
   else
   {
    BtnDataBackup.Enabled = false;
    BtnQuery.Enabled = false;
    btnCear.Enabled = false;

    if ( baks.RestoreDB(lstDb.SelectedItem.ToString(),txtOutFile.Text,txtDbName.Text,txtUserName.Text,txtPwd.Text) == true )
    {  
     pub.Alert("恢複成功!",this.Page);
    }
    else
    {
       pub.Alert("要恢複的資料庫檔案不存在,請輸入正確路徑!!",this.Page);
    }
    BtnDataBackup.Enabled = true;
    BtnQuery.Enabled = true;
    btnCear.Enabled = true;
   }
  }

2.

namespace WebSearch
{
 ///

    /*--------------------------------------------------------------------------
 系統名稱: xxxxx

 設計時間:2005-09-03
 代碼設計者:  winzheng
 模組名稱:   asp.net下sqlserver 2000 Database Backup與還原
 模組標識:   DbBAK
 --------------------------------------------------------------------------
 */
 public class bakServer
 {
  string ServerName;   //資料服務器名稱
  string UserName;     //使用者名稱稱
  string Password;     //使用者密碼
  string message;      //訊息提示
  
  public bakServer()
  {
   //
   // TODO: 在此處添加建構函式邏輯
   //
  }
  ///

  /// 取得資料庫伺服器列表
  ///
  /// 資料庫伺服器列表
  public ArrayList GetServerList()
  {
      ArrayList alServers = new ArrayList() ;
   SQLDMO.ApplicationClass sqlApp = new SQLDMO.ApplicationClass();
   try
   {
    SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers() ;
    if(serverList !=null)
    {
     for(int i = 1;i<= serverList.Count;i++)
     {
      alServers.Add(serverList.Item(i)) ;
     }
    }
    else
    {
       message="你的系統需要打上SQL SERVER 2000 SP3這個補丁";
    }
   }
   catch(Exception e)
   { 

    message = "取資料庫伺服器列表出錯:" +e.Message;

   }
   finally
   {
    sqlApp.Quit() ;
   }
   return alServers ;
  }
  ///

  /// 錯誤訊息處理
  ///
  /// 訊息資訊
  public string Msg()
  {  
   return message;
  }
  ///

  /// 取得指定資料庫列表
  ///
  ///伺服器名稱
  ///使用者名稱稱
  ///使用者密碼
  /// 資料庫列表
  public ArrayList GetDbList(string strServerName,string strUserName,string strPwd)
  {
   ServerName = strServerName ;
   UserName = strUserName ;
   Password = strPwd ;
           
   ArrayList alDbs = new ArrayList() ;
   SQLDMO.ApplicationClass sqlApp = new SQLDMO.ApplicationClass() ;
   SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
   try
   {
    svr.Connect(ServerName,UserName,Password) ;
    foreach(SQLDMO.Database db in svr.Databases)
    {
     if(db.Name!=null)
      alDbs.Add(db.Name) ;
    }
   }
   catch(Exception err)
   {
    //    throw(new Exception("串連資料庫出錯:"+e.Message)) ;
    message = "串連資料庫出錯:" +err.Message;
   }
   finally
   {
    svr.DisConnect() ;
    sqlApp.Quit() ;
   }
   return alDbs ;
  }
  ///
  ///資料庫名稱
  ///備份檔案名
  ///伺服器名稱
  ///使用者名稱稱
  ///密碼
  /// 備份成功返回true ,否則返回false
  public bool BackUPDB(string strDbName,string strFileName, string strServerName,string strUserName,string strPwd)
  {
   ServerName = strServerName ;
   UserName = strUserName ;
   Password = strPwd ;
   SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
   try
   {
    svr.Connect(ServerName,UserName,Password) ;
    SQLDMO.Backup bak = new SQLDMO.BackupClass();
    bak.Action = 0 ;
    bak.Initialize = true ;
    SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
    bak.PercentComplete += pceh;
    bak.Files = strFileName;
    bak.Database = strDbName;
    bak.SQLBackup(svr);
    return true ;
   }
   catch(Exception err)
   {
    //    throw(new Exception("備份資料庫失敗"+err.Message)) ;
    message = "備份資料庫失敗:" +err.Message;
    return false ;
   }
   finally
   {
    svr.DisConnect() ;
   }
  } 

  ///備份檔案名
  ///狀態條控制項名稱
  ///伺服器名稱
  ///使用者名稱稱
  ///密碼
  /// 恢複成功返回true ,否則返回false
  public bool RestoreDB(string strDbName,string strFileName,string strServerName,string strUserName,string strPwd )
  {
   SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
   try
   {
    ServerName = strServerName ;
    UserName = strUserName ;
    Password = strPwd ;

    svr.Connect(ServerName,UserName,Password) ;
    SQLDMO.QueryResults qr = svr.EnumProcesses(-1) ;
    int iColPIDNum = -1 ;
    int iColDbName = -1 ;
    for(int i=1;i<=qr.Columns;i++)
    {
     string strName = qr.get_ColumnName(i) ;
     if (strName.ToUpper().Trim() == "SPID")
     {
      iColPIDNum = i ;
     }
     else if (strName.ToUpper().Trim() == "DBNAME")
     {
      iColDbName = i ;
     }
     if (iColPIDNum != -1 && iColDbName != -1)
      break ;
    }

    for(int i=1;i<=qr.Rows;i++)
    {
     int lPID = qr.GetColumnLong(i,iColPIDNum) ;
     string strDBName = qr.GetColumnString(i,iColDbName) ;
     if (strDBName.ToUpper() == strDbName.ToUpper())
      svr.KillProcess(lPID) ;
    }

    SQLDMO.Restore res = new SQLDMO.RestoreClass() ;
    res.Action = 0 ;
    SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
    res.PercentComplete += pceh;
    res.Files = strFileName ;

    res.Database = strDbName ;
    res.ReplaceDatabase = true ;
    res.SQLRestore(svr) ;
    return true ;
   }
   catch(Exception err)
   { 

    message = "恢複資料庫失敗,請關閉所有和該資料庫連接的程式!" +err.Message;
    return false;
   }
   finally
   {
    svr.DisConnect() ;
   }
  }
      
 }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.