查看: 12443|回复: 0
打印 上一主题 下一主题

用asp.net还原与恢复sqlserver数据库

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-21 16:16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
  1. 利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。
  2. 我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。

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


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


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


  24. using System;

  25. using System.Configuration;

  26. using System.Data.SqlClient;

  27. using System.Data;

  28. namespace web.base_class

  29. {

  30.      /**////

  31.      /// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复

  32.      ///

  33.      public class DbOper

  34.      {

  35.           private string server;

  36.           private string uid;

  37.           private string pwd;

  38.           private string database;

  39.           private string conn;

  40.          /**////

  41.          /// DbOper类的构造函数

  42.          ///

  43.          public DbOper()

  44.          {

  45.               conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();

  46.               server=cut(conn,"server=",";");

  47.               uid=cut(conn,"uid=",";");

  48.               pwd=cut(conn,"pwd=",";");

  49.               database=cut(conn,"database=",";");

  50.          }

  51.          public string cut(string str,string bg,string ed)

  52.          {

  53.               string sub;

  54.               sub=str.Substring(str.IndexOf(bg)+bg.Length);

  55.               sub=sub.Substring(0,sub.IndexOf(";"));

  56.               return sub;

  57.          }



  58.          /**////

  59.          /// 数据库备份

  60.          ///

  61.          public  bool DbBackup(string url)

  62.          {

  63.               SQLDMO.Backup oBackup = new SQLDMO.BackupClass();

  64.               SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

  65.               try

  66.               {

  67.                    oSQLServer.LoginSecure = false;

  68.                    oSQLServer.Connect(server,uid, pwd);

  69.                    oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

  70.                    oBackup.Database = database;

  71.                    oBackup.Files = url;//"d:\Northwind.bak";

  72.                    oBackup.BackupSetName = database;

  73.                    oBackup.BackupSetDescription = "数据库备份";

  74.                    oBackup.Initialize = true;

  75.                    oBackup.SQLBackup(oSQLServer);

  76.                    return true;

  77.               }

  78.               catch

  79.               {

  80.                    return false;

  81.                    throw;

  82.               }

  83.               finally

  84.               {

  85.                    oSQLServer.DisConnect();

  86.               }

  87.          }



  88.          /**////

  89.          /// 数据库恢复

  90.          ///

  91.          public string DbRestore(string url)

  92.          {

  93.               if(exepro()!=true)//执行存储过程

  94.               {

  95.                    return "操作失败";

  96.               }

  97.               else

  98.               {

  99.                    SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();

  100.                    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

  101.                    try

  102.                    {

  103.                         oSQLServer.LoginSecure = false;

  104.                         oSQLServer.Connect(server, uid, pwd);

  105.                         oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

  106.                         oRestore.Database = database;

  107.                         oRestore.Files = url;//@"d:\Northwind.bak";

  108.                         oRestore.FileNumber = 1;

  109.                         oRestore.ReplaceDatabase = true;

  110.                         oRestore.SQLRestore(oSQLServer);

  111.                        return "ok";

  112.                    }

  113.                    catch(Exception e)

  114.                    {

  115.                        return "恢复数据库失败";

  116.                        throw;

  117.                    }

  118.                    finally

  119.                    {

  120.                         oSQLServer.DisConnect();

  121.                    }

  122.               }

  123.          }

  124.           private bool exepro()

  125.          {

  126.               SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");

  127.               SqlCommand cmd = new SqlCommand("killspid",conn1);

  128.               cmd.CommandType = CommandType.StoredProcedure;

  129.               cmd.Parameters.Add("@dbname","port");

  130.               try

  131.               {

  132.                    conn1.Open();

  133.                    cmd.ExecuteNonQuery();

  134.                    return true;

  135.               }

  136.               catch(Exception ex)

  137.               {

  138.                    return false;

  139.               }

  140.               finally

  141.               {

  142.                    conn1.Close();

  143.               }



  144.          }

  145.      }

  146. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表