专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » 还原数据库:用ASP.NET还原与恢复SQL Server数据库 »正文

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

来源: 发布时间:星期三, 2008年9月10日 浏览:76次 评论:0

  需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在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();
  
  }
  
  }
  
  }
  
  }
0
- 返回顶部
Copyright 2003-2008 www.Zxbc.cn All Rights Reserved
湘ICP备07001293号 E-mail:[email protected]
中国自学编程网版权所有,禁止转载!

如果本文没有解决您的问题,请进老妖怪开发者社区提问

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: