科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用ASP.NET还原与恢复SQL Server数据库

用ASP.NET还原与恢复SQL Server数据库

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:

作者:中国IT实验室 来源:中国IT实验室 2007年9月3日

关键字: 数据库 SQL Server ASP.NET

  • 评论
  • 分享微博
  • 分享邮件
  需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:
  
  create proc killspid (@dbname varchar(20))
  as
  begin
  declare @sql nvarchar(500)
  declare @spid int
  set @sql='declare getspid cursor for
  select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
  exec (@sql)
  open getspid
  fetch next from getspid into @spid
  while @@fetch_status<>-1
  begin
  exec('kill '+@spid)
  fetch next from getspid into @spid
  end
  close getspid
  deallocate getspid
  end
  GO
  
  在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)
  
  using System;
  
  using System.Configuration;
  
  using System.Data.SqlClient;
  
  using System.Data;
  
  namespace web.base_class
  
  {
  
  /// <summary>
  
  /// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
  
  /// </summary>
  
  public class DbOper
  
  {
  
  private string server;
  
  private string uid;
  
  private string pwd;
  
  private string database;
  
  private string conn;
  
  /// <summary>
  
  /// DbOper类的构造函数
  
  /// </summary>
  
  public DbOper()
  
  {
  
  conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
  
  server=cut(conn,"server=",";");
  
  uid=cut(conn,"uid=",";");
  
  pwd=cut(conn,"pwd=",";");
  
  database=cut(conn,"database=",";");
  
  }
  
  public string cut(string str,string bg,string ed)
  
  {
  
  string sub;
  
  sub=str.Substring(str.IndexOf(bg)+bg.Length);
  
  sub=sub.Substring(0,sub.IndexOf(";"));
  
  return sub;
  
  }
  
  
  
  /// <summary>
  
  /// 数据库备份
  
  /// </summary>
  
  public bool DbBackup(string url)
  
  {
  
  SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
  
  SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  
  try
  
  {
  
  oSQLServer.LoginSecure = false;
  
  oSQLServer.Connect(server,uid, pwd);
  
  oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  
  oBackup.Database = database;
  
  oBackup.Files = url;//"d:\Northwind.bak";
  
  oBackup.BackupSetName = database;
  
  oBackup.BackupSetDescription = "数据库备份";
  
  oBackup.Initialize = true;
  
  oBackup.SQLBackup(oSQLServer);
  
  return true;
  
  }
  
  catch
  
  {
  
  return false;
  
  throw;
  
  }
  
  finally
  
  {
  
  oSQLServer.DisConnect();
  
  }
  
  }
  
  /// <summary>
  
  /// 数据库恢复
  
  /// </summary>
  
  public string DbRestore(string url)
  
  {
  
  if(exepro()!=true)//执行存储过程
  
  {
  
  return "操作失败";
  
  }
  
  else
  
  {
  
  SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
  
  SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
  
  try
  
  {
  
  oSQLServer.LoginSecure = false;
  
  oSQLServer.Connect(server, uid, pwd);
  
  oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  
  oRestore.Database = database;
  
  oRestore.Files = url;//@"d:\Northwind.bak";
  
  oRestore.FileNumber = 1;
  
  oRestore.ReplaceDatabase = true;
  
  oRestore.SQLRestore(oSQLServer);
  
  return "ok";
  
  }
  
  catch(Exception e)
  
  {
  
  return "恢复数据库失败";
  
  throw;
  
  }
  
  finally
  
  {
  
  oSQLServer.DisConnect();
  
  }
  
  }
  
  }
  
  private bool exepro()
  
  {
  
  SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
  
  SqlCommand cmd = new SqlCommand("killspid",conn1);
  
  cmd.CommandType = CommandType.StoredProcedure;
  
  cmd.Parameters.Add("@dbname","port");
  
  try
  
  {
  
  conn1.Open();
  
  cmd.ExecuteNonQuery();
  
  return true;
  
  }
  
  catch(Exception ex)
  
  {
  
  return false;
  
  }
  
  finally
  
  {
  
  conn1.Close();
  
  }
  
  }
  
  }
  
  }

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章