首页 > 编程 > .NET > 正文

在ASP.NET页面中实现数据库备份和恢复功能

2024-07-10 13:05:52
字体:
来源:转载
供稿:网友
using   system;  
  using   sqldmo;  
  using   system.drawing;  
  using   system.collections;  
  using   system.componentmodel;  
  using   system.windows.forms;  
  using   system.data;  
   
  namespace   bakserve040907  
  {  
   
  ///   <summary>  
  ///   数据库备份类说明  
  ///   </summary>  
  public   class   bakserver  
  {  
  string   servername;       //数据服务器名称  
  string   username;           //用户名称  
  string   password;           //用户密码  
  string   message;             //消息提示    
  progressbar   pbar;         //状态条控件  
   
  public   bakserver()  
  {  
   
  }  
   
  ///   <summary>  
  ///   取得数据库服务器列表  
  ///   </summary>  
  ///   <returns>数据库服务器列表</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("取数据库服务器列表出错:"+e.message))   ;    
  message   =   "取数据库服务器列表出错:"   +e.message;  
   
  }    
  finally    
  {    
  sqlapp.quit()   ;    
  }    
  return   alservers   ;    
  }    
   
   
  ///   <summary>  
  ///   错误消息处理  
  ///   </summary>  
  ///   <returns>消息信息</returns>  
  public   string   msg()  
  {  
  return   message;  
  }  
   
  ///   <summary>  
  ///   取得指定数据库列表  
  ///   </summary>  
  ///   <param   name="strservername">服务器名称</param>  
  ///   <param   name="strusername">用户名称</param>  
  ///   <param   name="strpwd">用户密码</param>  
  ///   <returns>数据库列表</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("连接数据库出错:"+e.message))   ;    
  message   =   "连接数据库出错:"   +err.message;  
  }    
  finally    
  {    
  svr.disconnect()   ;    
  sqlapp.quit()   ;    
  }    
  return   aldbs   ;    
  }    
   
   
  //数据库的备份和实时进度显示代码:    
  ///   <summary>  
  ///   数据库的备份和实时进度显示  
  ///   </summary>  
  ///   <param   name="strdbname">数据库名称</param>  
  ///   <param   name="strfilename">备份文件名</param>  
  ///   <param   name="pgbmain">状态条控件名称</param>  
  ///   <param   name="strservername">服务器名称</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("备份数据库失败"+err.message))   ;    
  message   =   "备份数据库失败:"   +err.message;  
                                  return   false   ;    
  }    
  finally    
  {    
  svr.disconnect()   ;    
  }    
  }    
   
   
  ///   <summary>  
  ///   显示进度条的当前进度  
  ///   </summary>  
  ///   <param   name="message"></param>  
  ///   <param   name="percent"></param>  
  private   void   step(string   message,int   percent)    
  {    
  pbar.value   =   percent   ;    
  }    
  // 其中,这两个语句实现了进度的实时显示:    
  // sqldmo.backupsink_percentcompleteeventhandler   pceh   =   new   sqldmo.backupsink_percentcompleteeventhandler(step);    
  // bak.percentcomplete   +=   pceh;    
  // step就是上面private   void   step(string   message,int   percent)   的方法名称,它用来显示进度条的当前进度。    
   
   
   
  ///   <summary>  
  ///   数据库的恢复和杀死进程  
  ///   </summary>  
  ///   <param   name="strdbname">数据库名称</param>  
  ///   <param   name="strfilename">备份文件名</param>  
  ///   <param   name="pgbmain">状态条控件名称</param>  
  ///   <param   name="strservername">服务器名称</param>  
  ///   <param   name="strusername">用户名称</param>  
  ///   <param   name="strpwd">密码</param>  
  ///   <returns>恢复成功返回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("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.message))   ;    
  message   =   "恢复数据库失败,请关闭所有和该数据库连接的程序!"   +err.message;  
  return   false;  
  }    
  finally    
  {    
  svr.disconnect()   ;    
  }    
  }    
  }  
  }   
 
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表