日期:2014-05-17  浏览次数:20973 次

winform程序备份和还原数据库
小妹做了一个winform系统,需要对sql2000数据库备份和还原
备份的代码如下:
 /// <summary>
  /// 数据库备份
  /// </summary>
  public static int DbBackup(string serverip, string username, string psw, string path)
  {
  int ret;
  SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
  SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  try
  {
  oSQLServer.LoginSecure = false;
  oSQLServer.Connect(serverip, username, psw);
  oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  oBackup.Database = "BookLibrarySystem";
  oBackup.Files = path + "\\BookLibrarySystem.bak"; ;
  oBackup.BackupSetName = "BookLibrarySystem";
  oBackup.BackupSetDescription = "数据库备份";
  oBackup.Initialize = true;
  oBackup.SQLBackup(oSQLServer);
  ret = 1;
  }
  catch
  {
  ret = 0;
  throw;

  }
  finally
  {
  oSQLServer.DisConnect();
  }
  return ret;
  }
这样可以备份成功,生成文件BookLibrarySystem.bak
但是数据库还原的,我需要登录到我的系统后,点某个按钮还原,我搜了资料,说要杀死所有进程才能还原,但是我的系统已经链接到数据库了,这样就会报数据库被使用,不能杀死进程这种类似的错误,请各位路过的都来看一看,代码如下:
 /// <summary>
  /// 数据库恢复
  /// </summary>
  public static int DbRestore(string serverip, string username, string psw, string path)
  {
  int ret;
  SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
  SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  try
  {
  exepro(serverip, username, psw);
  oSQLServer.LoginSecure = false;
  oSQLServer.Connect(serverip, username, psw);
  oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  oRestore.Database = "BookLibrarySystem";
  oRestore.Files = path + "\\BookLibrarySystem.bak";
  oRestore.FileNumber = 1;
  oRestore.ReplaceDatabase = true;
  oRestore.SQLRestore(oSQLServer);
  ret = 1;
  }
  catch
  {
  ret = 0;
  throw;
  }
  finally
  {
  oSQLServer.DisConnect();
  }
  return ret;
  }

  /**/
  /// <summary>
  /// 杀死当前库的所有进程
  /// </summary>
  /// <returns></returns>
  private static bool exepro(string serverip, string username, string psw)
  {

  SqlConnection conn1 = new SqlConnection("server=" + serverip + ";uid=" + username + ";pwd=" + psw + ";database=master");
  SqlCommand cmd = new SqlCommand("p_killspid", conn1);
  cmd.Parameters.Add(new SqlParameter("@dbname", "BookLibrarySystem"));


  try
&nbs