用asp.net还原与恢复sqlserver数据库
利用SQLDMO实现,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。
自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。
需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:

 1create proc killspid (@dbname varchar(20))
 2as
 3begin
 4    declare @sql nvarchar(500)
 5    declare @spid int
 6    set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
 7    exec (@sql)
 8    open getspid
 9    fetch next from getspid into @spid
10    while @@fetch_status<>-1
11    begin
12    exec('kill '+@spid)
13    fetch next from getspid into @spid
14    end
15    close getspid
16    deallocate getspid
17end
18GO

在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)

  1using System;
  2using System.Configuration;
  3using System.Data.SqlClient;
  4using System.Data;
  5namespace web.base_class
  6{
  7     /// <summary>
  8     /// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
  9     /// </summary>

 10     public class DbOper
 11     {
 12          private string server;
 13          private string uid;
 14          private string pwd;
 15          private string database;
 16          private string conn;
 17         /// <summary>
 18         /// DbOper类的构造函数
 19         /// </summary>

 20         public DbOper()
 21         {
 22              conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
 23              server=cut(conn,"server=",";");
 24              uid=cut(conn,"uid=",";");
 25              pwd=cut(conn,"pwd=",";");
 26              database=cut(conn,"database=",";");
 27         }

 28         public string cut(string str,string bg,string ed)
 29         {
 30              string sub;
 31              sub=str.Substring(str.IndexOf(bg)+bg.Length);
 32              sub=sub.Substring(0,sub.IndexOf(";"));
 33              return sub;
 34         }

 35 
 36         /// <summary>
 37         /// 数据库备份
 38         /// </summary>

 39         public  bool DbBackup(string url)
 40         {
 41              SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
 42              SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
 43              try
 44              {
 45                   oSQLServer.LoginSecure = false;
 46                   oSQLServer.Connect(server,uid, pwd);
 47                   oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
 48                   oBackup.Database = database;
 49                   oBackup.Files = url;//"d:\Northwind.bak";
 50                   oBackup.BackupSetName = database;
 51                   oBackup.BackupSetDescription = "数据库备份";
 52                   oBackup.Initialize = true;
 53                   oBackup.SQLBackup(oSQLServer);
 54                   return true;
 55              }

 56              catch
 57              {
 58                   return false;
 59                   throw;
 60              }

 61              finally
 62              {
 63                   oSQLServer.DisConnect();
 64              }

 65         }

 66 
 67         /// <summary>
 68         /// 数据库恢复
 69         /// </summary>

 70         public string DbRestore(string url)
 71         {
 72              if(exepro()!=true)//执行存储过程
 73              {
 74                   return "操作失败";
 75              }

 76              else
 77              {
 78                   SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
 79                   SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
 80                   try
 81                   {
 82                        oSQLServer.LoginSecure = false;
 83                        oSQLServer.Connect(server, uid, pwd);
 84                        oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
 85                        oRestore.Database = database;
 86                        oRestore.Files = url;//@"d:\Northwind.bak";
 87                        oRestore.FileNumber = 1;
 88                        oRestore.ReplaceDatabase = true;
 89                        oRestore.SQLRestore(oSQLServer);
 90                       return "ok";
 91                   }

 92                   catch(Exception e)
 93                   {
 94                       return "恢复数据库失败";
 95                       throw;
 96                   }

 97                   finally
 98                   {
 99                        oSQLServer.DisConnect();
100                   }

101              }

102         }

103          private bool exepro()
104         {
105              SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
106              SqlCommand cmd = new SqlCommand("killspid",conn1);
107              cmd.CommandType = CommandType.StoredProcedure;
108              cmd.Parameters.Add("@dbname","port");
109              try
110              {
111                   conn1.Open();
112                   cmd.ExecuteNonQuery();
113                   return true;
114              }

115              catch(Exception ex)
116              {
117                   return false;
118              }

119              finally
120              {
121                   conn1.Close();
122              }

123 
124         }

125     }

126}
posted on 2007-03-01 09:34  WilliamsQi  阅读(195)  评论(0编辑  收藏  举报



CoolCha 库查搜索
查手机号码归属地
查IP地址、火车车次、邮编、在线翻译... 淘星助手