怎樣實現數據庫的備份與恢復

//可參考下面代碼。代碼有待修改的地方,使用sql語句進行數據備份,恢復   

  ///   <summary>   

                  ///   備份數據庫   

                  ///   </summary>   

                  ///   <param   name="sender"></param>   

                  ///   <param   name="e"></param>   

  private   void   _ButtonBackUp_Click(object   sender,   System.EventArgs   e)   

  {   

  dbConnSet   frm   =   new   dbConnSet();//獲得數據庫sa帳號,密碼   

  frm.ShowDialog();   

  if(frm.isNormal==false)   

  return;     

  this.Cursor   =   Cursors.WaitCursor;   

  string   _DBSource     =   "(local)";   

  string   _DBCatalog   =   "master";   

  string   _DBUser         =   frm.textBoxDBUser.Text;   

  string   _DBPass         =   frm.textBoxDBPas.Text;   

  string   m_ConnectionStr       =   "Provider=SQLOLEDB;Password="+_DBPass+";User   ID="+_DBUser+";Initial   Catalog="+_DBCatalog+";Data   Source="+_DBSource+";Connect   Timeout=5;";   

  OleDbConnection   _Conn   =   new   OleDbConnection(m_ConnectionStr);                           

  try   

  {   

  _Conn.Open();   

  NetBee.Controls.FolderBrowserEX.FolderBrowser   _SaveFileDialog   =   new   NetBee.Controls.FolderBrowserEX.FolderBrowser();                   //保存的文件目錄路徑                 

  _SaveFileDialog.Description   =   "請選擇備份保存的目錄";   

  if(_SaveFileDialog.ShowDialog()==DialogResult.OK)   

  {   

        

  string   _FolderPath   =   _SaveFileDialog.DirectoryPath;         

  string[]   DBName   =   {Cs.PubObject.dbName};   

  for(int   i=0;i<DBName.Length;i++)   

  {   

                                                      

  string   _DBName       =   DBName[i];   

  OleDbCommand   _Comm   =   new   OleDbCommand("",_Conn);   

  //執行數據庫備份命令   

  _Comm.CommandText   =   "BACKUP   DATABASE   "+_DBName+"   TO   DISK   =   '"+   _SaveFileDialog.DirectoryPath+@"/"+_DBName   +".bak'";   

  _Comm.ExecuteNonQuery();   

  }   

  this.Cursor   =   Cursors.Arrow;   

  _Conn.Close();   

  MessageBox.Show("備份數據成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);   

    

          

  }   

                                  this.Cursor   =   Cursors.Arrow;   

    

  }   

  catch(System.Exception   error)   

  {   

  this.Cursor   =   Cursors.Arrow;   

  MessageBox.Show("異常:"+error.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);   

  }   

  this.Cursor   =   Cursors.Arrow;   

  }   

    

  #endregion   

    

  #region   恢復數據庫   

  ///   <summary>   

  ///   恢復數據庫   

  ///   </summary>   

  ///   <param   name="sender"></param>   

  ///   <param   name="e"></param>   

  private   void   _ButtonRestory_Click(object   sender,   System.EventArgs   e)   

  {   

  dbConnSet   frm   =   new   dbConnSet();   

  frm.ShowDialog();   

  if(frm.isNormal==false)   

  return;     

  if(MessageBox.Show("該操作將數據覆蓋!!/n/n如果選擇[是],將原來的數據覆蓋/n/n如果選擇[否],將退出安裝","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.No)   

  return;   

  if(MessageBox.Show("請在此確認,該操作不能恢復!!/n/n如果選擇[是],將原來的數據覆蓋/n/n如果選擇[否],將退出安裝","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)   

  return;   

  this.Cursor   =   Cursors.WaitCursor;   

  string   _DBSource     =   "(local)";   

  string   _DBCatalog   =   "master";   

  string   _DBUser         =   frm.textBoxDBUser.Text;   

  string   _DBPass         =   frm.textBoxDBPas.Text;   

  string   m_ConnectionStr       =   "Provider=SQLOLEDB;Password="+_DBPass+";User   ID="+_DBUser+";Initial   Catalog="+_DBCatalog+";Data   Source="+_DBSource+";Connect   Timeout=5;";   

  OleDbConnection   _Conn   =   new   OleDbConnection(m_ConnectionStr);                           

  try   

  {   

  _Conn.Open();       

  NetBee.Controls.FolderBrowserEX.FolderBrowser   _SaveFileDialog   =   new   NetBee.Controls.FolderBrowserEX.FolderBrowser();                                   

  _SaveFileDialog.Description   =   "請要恢復的數據目錄";   

  if(_SaveFileDialog.ShowDialog()==DialogResult.OK)   

  {   

        

  string   _FolderPath   =   _SaveFileDialog.DirectoryPath;         

  string[]   DBName   =   {Cs.PubObject.dbName};   

  for(int   i=0;i<DBName.Length;i++)   

  {   

  string   _DBName       =   DBName[i];       

  string   _BakFilePath   =   _SaveFileDialog.DirectoryPath+@"/"+DBName[i]+@".bak";   

  OleDbCommand   _Comm   =   new   OleDbCommand("restore   filelistonly   from   disk='"+_FolderPath+@"/"+_DBName+@".bak'",_Conn);//獲得原來的邏輯名稱以及物理路徑   

  OleDbDataReader   _Reader   =   null;   

  _Reader   =   _Comm.ExecuteReader();   

  string[]     _LogName   =   new   string[2];//獲得邏輯名稱   

  string[]     _PhiPath   =   new   string[2];//獲得物理路徑   

  int   j   =   0;   

  while(_Reader.Read())   

  {   

  _LogName[j]   =   (string)_Reader.GetValue(0);   

  _PhiPath[j]   =   (string)_Reader.GetValue(1);   

  j   =   j+1;   

  }   

  _Reader.Close();   

    

  //執行數據庫恢復腳本   

  _Comm   =   new   OleDbCommand("",_Conn);   

  _Comm.CommandText   ="RESTORE   DATABASE   ["   +   _DBName   +   "]       FROM   DISK   =   '"   +   _BakFilePath   +   "'   With   Move   '"+   _LogName[0]   +   

  "'   TO   '"   +_PhiPath[0]+   "',     Move   '"   +   _LogName[1]   +   "'   TO   '"   +   _PhiPath[1]+   "'";   

  _Comm.ExecuteNonQuery();   

    

  }   

  this.Cursor   =   Cursors.Arrow;   

  MessageBox.Show("數據恢復成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);   

  _Conn.Close();   

          

  }   

                                  this.Cursor   =   Cursors.Arrow;   

    

  }   

  catch(System.Exception   error)   

  {   

  this.Cursor   =   Cursors.Arrow;   

  MessageBox.Show("異常:"+error.Message,"錯誤",MessageBoxButtons.OK,MessageBoxIcon.Error);   

  }             

  }   

  #endregion   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章