在ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)庫備份和恢復(fù)功能
2024-07-10 13:05:52
供稿:網(wǎng)友
 
using   system;   
  using   sqldmo;   
  using   system.drawing;   
  using   system.collections;   
  using   system.componentmodel;   
  using   system.windows.forms;   
  using   system.data;   
    
  namespace   bakserve040907   
  {   
    
  ///   <summary>   
  ///   數(shù)據(jù)庫備份類說明   
  ///   </summary>   
  public   class   bakserver   
  {   
  string   servername;       //數(shù)據(jù)服務(wù)器名稱   
  string   username;           //用戶名稱   
  string   password;           //用戶密碼   
  string   message;             //消息提示     
  progressbar   pbar;         //狀態(tài)條控件   
    
  public   bakserver()   
  {   
    
  }   
    
  ///   <summary>   
  ///   取得數(shù)據(jù)庫服務(wù)器列表   
  ///   </summary>   
  ///   <returns>數(shù)據(jù)庫服務(wù)器列表</returns>   
  public   arraylist   getserverlist()     
  {     
  arraylist   alservers   =   new   arraylist()   ;     
  sqldmo.application   sqlapp   =   new   sqldmo.applicationclass()   ;     
  try     
  {     
  sqldmo.namelist   serverlist   =   sqlapp.listavailablesqlservers()   ;     
  for(int   i   =   1;i<=   serverlist.count;i++)     
  {     
  alservers.add(serverlist.item(i))   ;     
  }     
  }     
  catch(exception   e)     
  {     
  // throw(new   exception("取數(shù)據(jù)庫服務(wù)器列表出錯(cuò):"+e.message))   ;     
  message   =   "取數(shù)據(jù)庫服務(wù)器列表出錯(cuò):"   +e.message;   
    
  }     
  finally     
  {     
  sqlapp.quit()   ;     
  }     
  return   alservers   ;     
  }     
    
    
  ///   <summary>   
  ///   錯(cuò)誤消息處理   
  ///   </summary>   
  ///   <returns>消息信息</returns>   
  public   string   msg()   
  {   
  return   message;   
  }   
    
  ///   <summary>   
  ///   取得指定數(shù)據(jù)庫列表   
  ///   </summary>   
  ///   <param   name="strservername">服務(wù)器名稱</param>   
  ///   <param   name="strusername">用戶名稱</param>   
  ///   <param   name="strpwd">用戶密碼</param>   
  ///   <returns>數(shù)據(jù)庫列表</returns>   
  public   arraylist   getdblist(string   strservername,string   strusername,string   strpwd)     
  {     
  servername   =   strservername   ;     
  username   =   strusername   ;     
  password   =   strpwd   ;     
    
    
  arraylist   aldbs   =   new   arraylist()   ;     
  sqldmo.application   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("連接數(shù)據(jù)庫出錯(cuò):"+e.message))   ;     
  message   =   "連接數(shù)據(jù)庫出錯(cuò):"   +err.message;   
  }     
  finally     
  {     
  svr.disconnect()   ;     
  sqlapp.quit()   ;     
  }     
  return   aldbs   ;     
  }     
    
    
  //數(shù)據(jù)庫的備份和實(shí)時(shí)進(jìn)度顯示代碼:     
  ///   <summary>   
  ///   數(shù)據(jù)庫的備份和實(shí)時(shí)進(jìn)度顯示   
  ///   </summary>   
  ///   <param   name="strdbname">數(shù)據(jù)庫名稱</param>   
  ///   <param   name="strfilename">備份文件名</param>   
  ///   <param   name="pgbmain">狀態(tài)條控件名稱</param>   
  ///   <param   name="strservername">服務(wù)器名稱</param>   
  ///   <param   name="strusername">用戶名稱</param>   
  ///   <param   name="strpwd">密碼</param>   
  ///   <returns>備份成功返回true   ,否則返回false</returns>   
  public   bool   backupdb(string   strdbname,string   strfilename,   progressbar   pgbmain,string   strservername,string   strusername,string   strpwd)     
  {     
  servername   =   strservername   ;     
  username   =   strusername   ;     
  password   =   strpwd   ;     
    
  pbar   =   pgbmain;     
  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("備份數(shù)據(jù)庫失敗"+err.message))   ;     
  message   =   "備份數(shù)據(jù)庫失敗:"   +err.message;   
                                  return   false   ;     
  }     
  finally     
  {     
  svr.disconnect()   ;     
  }     
  }     
    
    
  ///   <summary>   
  ///   顯示進(jìn)度條的當(dāng)前進(jìn)度   
  ///   </summary>   
  ///   <param   name="message"></param>   
  ///   <param   name="percent"></param>   
  private   void   step(string   message,int   percent)     
  {     
  pbar.value   =   percent   ;     
  }     
  // 其中,這兩個(gè)語句實(shí)現(xiàn)了進(jìn)度的實(shí)時(shí)顯示:     
  // sqldmo.backupsink_percentcompleteeventhandler   pceh   =   new   sqldmo.backupsink_percentcompleteeventhandler(step);     
  // bak.percentcomplete   +=   pceh;     
  // step就是上面private   void   step(string   message,int   percent)   的方法名稱,它用來顯示進(jìn)度條的當(dāng)前進(jìn)度。     
    
    
    
  ///   <summary>   
  ///   數(shù)據(jù)庫的恢復(fù)和殺死進(jìn)程   
  ///   </summary>   
  ///   <param   name="strdbname">數(shù)據(jù)庫名稱</param>   
  ///   <param   name="strfilename">備份文件名</param>   
  ///   <param   name="pgbmain">狀態(tài)條控件名稱</param>   
  ///   <param   name="strservername">服務(wù)器名稱</param>   
  ///   <param   name="strusername">用戶名稱</param>   
  ///   <param   name="strpwd">密碼</param>   
  ///   <returns>恢復(fù)成功返回true   ,否則返回false</returns>   
  public   bool   restoredb(string   strdbname,string   strfilename,   progressbar   pgbmain,string   strservername,string   strusername,string   strpwd   )     
  {     
  pbar   =   pgbmain   ;     
  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)     
  {     
  // throw(new   exception("恢復(fù)數(shù)據(jù)庫失敗,請(qǐng)關(guān)閉所有和該數(shù)據(jù)庫連接的程序!"+err.message))   ;     
  message   =   "恢復(fù)數(shù)據(jù)庫失敗,請(qǐng)關(guān)閉所有和該數(shù)據(jù)庫連接的程序!"   +err.message;   
  return   false;   
  }     
  finally     
  {     
  svr.disconnect()   ;     
  }     
  }     
  }   
  }   
 
網(wǎng)站運(yùn)營seo文章大全提供全面的站長運(yùn)營經(jīng)驗(yàn)及seo技術(shù)!