国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用asp.net還原與恢復sqlserver數據庫

2019-11-18 17:08:53
字體:
來源:轉載
供稿:網友

上次做了個項目,涉及到數據庫的還原和恢復,到網上找了一下,是利用SQLDMO實現的,只要添加SQLDMO引用就好了,然后利用下邊的類的方法就可以實現了。

我把原作者的類擴充了一下,可以自動識別web.config里 的數據庫連接字符串,可以通過變量設置還原恢復的信息。

 

需要注意的時還原,還原的時候問題最大了,有別的用戶使用數據庫的時候無法還原,解決辦法就是在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();

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

     }

 

 

 

}


http://guanvee.VEVb.com/archive/2006/06/16/427514.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙岩市| 大埔县| 泰安市| 张家川| 年辖:市辖区| 防城港市| 成武县| 江安县| 中超| 巩留县| 杭锦旗| 盐城市| 昌图县| 图片| 山丹县| 双流县| 原阳县| 南华县| 博兴县| 赞皇县| 大竹县| 曲沃县| 怀化市| 青铜峡市| 慈溪市| 吴川市| 黄冈市| 广汉市| 尉犁县| 马公市| 德化县| 寻乌县| 秭归县| 体育| 平江县| 交城县| 安图县| 江永县| 滕州市| 滕州市| 上虞市|