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

首頁 > 編程 > .NET > 正文

用asp.net還原與恢復(fù)sqlserver數(shù)據(jù)庫

2024-07-10 13:06:49
字體:
供稿:網(wǎng)友

利用sqldmo實(shí)現(xiàn)的,只要添加sqldmo引用就好了,然后利用下邊的類的方法就可以實(shí)現(xiàn)了。
我把原作者的類擴(kuò)充了一下,可以自動識別web.config里 的數(shù)據(jù)庫連接字符串,可以通過變量設(shè)置還原恢復(fù)的信息。

需要注意的時(shí)還原,還原的時(shí)候問題最大了,有別的用戶使用數(shù)據(jù)庫的時(shí)候無法還原,解決辦法就是在master數(shù)據(jù)庫中添加一個(gè)存儲過程:


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('''[email protected]+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '[email protected])
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
go


在還原之前先執(zhí)行這個(gè)存儲過程,需要傳遞dbname,就是你的數(shù)據(jù)庫的名字。下邊是類的原代碼:(web.config里的數(shù)據(jù)庫連接字符串是constr)
 

using system;

using system.configuration;

using system.data.sqlclient;

using system.data;

namespace web.base_class

{

     /**//// <summary>

     /// dboper類,主要應(yīng)用sqldmo實(shí)現(xiàn)對microsoft sql server數(shù)據(jù)庫的備份和恢復(fù)

     /// </summary>

     public class dboper

     {

          private string server;

          private string uid;

          private string pwd;

          private string database;

          private string conn;

         /**//// <summary>

         /// dboper類的構(gòu)造函數(shù)

         /// </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>

         /// 數(shù)據(jù)庫備份

         /// </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 = "數(shù)據(jù)庫備份";

                   obackup.initialize = true;

                   obackup.sqlbackup(osqlserver);

                   return true;

              }

              catch

              {

                   return false;

                   throw;

              }

              finally

              {

                   osqlserver.disconnect();

              }

         }

 

         /**//// <summary>

         /// 數(shù)據(jù)庫恢復(fù)

         /// </summary>

         public string dbrestore(string url)

         {

              if(exepro()!=true)//執(zhí)行存儲過程

              {

                   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 "恢復(fù)數(shù)據(jù)庫失敗";

                       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();

              }

 

         }

     }

}

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 徐水县| 荣成市| 宁都县| 五台县| 阿合奇县| 建昌县| 罗源县| 晋中市| 四子王旗| 抚远县| 随州市| 甘孜县| 广安市| 榕江县| 南皮县| 托克逊县| 灵台县| 自贡市| 凌源市| 铅山县| 宜章县| 和田市| 铁岭县| 遂昌县| 肇东市| 临西县| 晋中市| 汉阴县| 江孜县| 南宁市| 德庆县| 五指山市| 肇东市| 理塘县| 泾川县| 木兰县| 安陆市| 中江县| 鄱阳县| 安新县| 清徐县|