网络技术 > .Net程序
.Net下的数据备份和还原
分类:.Net程序    时间:2023-05-07    浏览:4889次

据库:SQL Server  ;引用SQLDMO
◆数据备份 :
 /// <summary>
  /// 备份数据库
  /// </summary>
  private void btnBackUp_Click(object sender, System.EventArgs e)
  {
   this.Cursor = Cursors.WaitCursor;
   this.label1.Text =   正在进行档案库的数据备份,这可能需要几秒到几十的时间,请稍候...;
   this.label1.Visible = true;
   this.label1.Refresh();
   this.pBar1.Visible = true;
   //

   
   string selfName = “D:\NorthwindBak“;
   string deviceName = “NorthwindBak“;
   string remark = 备份测试;
   
   //◆数据备份:
   SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
   SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
   oBackup.Action = 0 ; 
   oBackup.Initialize = true ; 
   SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
   oBackup.PercentComplete += pceh;

   try
   {
    oSQLServer.LoginSecure = false;
    oSQLServer.Connect(Common.MySettings.SqlServerName, sa, );
    oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    oBackup.Database = Northwind;//数据库名
    oBackup.Files = selfName;//文件路径
    oBackup.BackupSetName = deviceName;//备份名称
    oBackup.BackupSetDescription = remark;//备份描述
    oBackup.Initialize = true;
    oBackup.SQLBackup(oSQLServer);
    
   }
   catch(System.Exception ex)
   {
    Common.ShowMsg(数据备份失败:\n + ex.ToString());
   }
   finally
   {
    oSQLServer.DisConnect();
   }

   //
   this.label1.Visible = false;
   this.pBar1.Visible = false;
   this.Cursor = Cursors.Default;
  }


  /// <summary>
  /// 显示备份进度条
  /// </summary>
  private void Step(string message,int percent) 
  { 
   this.pBar1.Value = percent ; 
  }

◆数据还原 :
  /// <summary>
  /// 还原数据库
  /// </summary>
  private void btnRestore_Click(object sender, System.EventArgs e)
  {
   
   this.Cursor = Cursors.WaitCursor;
   this.label1.Text =   正在进行档案库的数据还原,这可能需要几秒到几十的时间,请稍候...;
   this.label1.Visible = true;
   this.label1.Refresh();
   this.pBar1.Visible = true;
   //

   string fileName = NorthwindBak;
   string filePath = D:\NorthwindBak;
   string remark = 备份测试;

   SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
   SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
   oRestore.Action = 0 ; 
   SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); 
   oRestore.PercentComplete += pceh; 
   try
   {
                oSQLServer.Connect(Common.MySettings.SqlServerName, sa, );
                SQLDMO.QueryResults qr = oSQLServer.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() == Northwind.ToUpper()) 
                        oSQLServer.KillProcess(lPID) ; 
                }


    oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    oRestore.Database = Northwind;
    oRestore.Files = filePath;
    oRestore.FileNumber = 1;
    oRestore.ReplaceDatabase = true;
    oRestore.SQLRestore(oSQLServer);

                
  }
            catch(System.Exception ex)
            {
                Common.ShowMsg(数据还原失败:\n + ex.ToString());
   }
   finally
   {
    oSQLServer.DisConnect();
   }
  
   //
   this.label1.Visible = false;
   this.pBar1.Visible = false;
   this.Cursor = Cursors.Default;
  }

  /// <summary>
  /// 显示还原进度条
  /// </summary>
  private void Step(string message,int percent) 
  { 
   this.pBar1.Value = percent ; 
  }

Copyright © 2014-2024 shaooo.com All Rights Reserved. 苏ICP备08014032号
返回顶部