远程备份数据库

 
手头上只有C#的代码,不知道对你有没有帮助
远程备份要注意权限的问题,普通的访问帐户没有备份和还原的权限,最好用sa的帐户,并且程序访问的帐户必须添加到远程机器的系统内
你说的远程备份到本地是不可能的,你只有开放远程某个文件夹加入你的特殊访问帐户权限
最好直接用远程桌面,这样最方便

方法一(不使用SQLDMO):

 ///
 ///备份方法
 ///
 SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;");
 
 SqlCommand cmdBK = new SqlCommand();
 cmdBK.CommandType = CommandType.Text;
 cmdBK.Connection = conn;
 cmdBK.CommandText = @"backup database test to disk='C:\ba' with init";

 try
 {
  conn.Open();
  cmdBK.ExecuteN
onQuery();
  MessageBox.Show("Backup successed.");
 }
 catch(Exception ex)
 {
  MessageBox.Show(ex.Message);
 }
 finally
 {
  conn.Close();
  conn.Dispose();
 }


 ///
 ///还原方法
 ///
 SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
 conn.Open();

 //KILL DataBase Process
 SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn);
 SqlDataReader dr;
 dr = cmd.ExecuteReader();
 ArrayList list = new ArrayList();
 while(dr.Read())
 {
  list.Add(dr.GetInt16(0));
 }
 dr.Close();
 for(int i = 0; i < list.Count; i++)
 {
  cmd = new SqlCommand(string.Format("KILL {0}", list[i]), conn);
  cmd.ExecuteNonQuery();
 }

 SqlCommand cmdRT = new SqlCommand();
 cmdRT.CommandType = CommandType.Text;
 cmdRT.Connection = conn;
 cmdRT.CommandText = @"restore database test from disk='C:\ba'";

 try
 {
  cmdRT.ExecuteNonQuery();
  MessageBox.Show("Restore successed.");
 }
 catch(Exception ex)
 {
  MessageBox.Show(ex.Message);
 }
 finally
 {
  conn.Close();
 }

方法二(使用SQLDMO):

 ///
 ///备份方法
 ///
 SQLDMO.Backup backup = new SQLDMO.BackupClass();
 SQLDMO.SQLServer server = new SQLDMO.SQLServerClass();
 //显示进度条
 SQLDMO.BackupSink_PercentCompleteEventHandler progress = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
 backup.PercentComplete += progress;

 try
 {
  server.LoginSecure = false;
  server.Connect(".", "sa", "sa");
  backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  backup.Database = "test";
  backup.Files = @"D:\test\myProg\backupTest";
  backup.BackupSetName = "test";
  backup.BackupSetDescription = "Backup the database of test";
  backup.Initialize = true;
  backup.SQLBackup(server);
  MessageBox.Show("Backup successed.");
 }
 catch(Exception ex)
 {
  MessageBox.Show(ex.Message);
 }
 finally
 {
  server.DisConnect();
 }
 this.pbDB.Value = 0;
 
 
 
 ///
 ///还原方法
 ///
 SQLDMO.Restore restore = new SQLDMO.RestoreClass();
 SQLDMO.SQLServer server = new SQLDMO.SQLServerClass();
 //显示进度条
 SQLDMO.RestoreSink_PercentCompleteEventHandler progress = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
 restore.PercentComplete += progress;

 //KILL DataBase Process
 SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False");
 conn.Open();
 SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'", conn);
 SqlDataReader dr;
 dr = cmd.ExecuteReader();
 ArrayList list = new ArrayList();
 while(dr.Read())
 {
  list.Add(dr.GetInt16(0));
 }
 dr.Close();
 for(int i = 0; i < list.Count; i++)
 {
  cmd = new SqlCommand(string.Format("KILL {0}", list[i]), conn);
  cmd.ExecuteNonQuery();
 }
 conn.Close();
 
 try
 {
  server.LoginSecure = false;
  server.Connect(".", "sa", "sa");
  restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  restore.Database = "test";
  restore.Files = @"D:\test\myProg\backupTest";
  restore.FileNumber = 1;
  restore.ReplaceDatabase = true;
  restore.SQLRestore(server);
  MessageBox.Show("Restore successed.");
 }
 catch(Exception ex)
 {
  MessageBox.Show(ex.Message);
 }
 finally
 {
  server.DisConnect();
 }
 this.pbDB.Value = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值