日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2025/3/8 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用asp.net还原与恢复sqlserver数据库(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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


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


在還原之前先執(zhí)行這個(gè)存儲(chǔ)過(guò)程,需要傳遞dbname,就是你的數(shù)據(jù)庫(kù)的名字。下邊是類的原代碼:(web.config里的數(shù)據(jù)庫(kù)連接字符串是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)對(duì)Microsoft?SQL?Server數(shù)據(jù)庫(kù)的備份和恢復(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ù)庫(kù)備份

?????????
///?</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ù)庫(kù)備份";

???????????????????oBackup.Initialize?
=?true;

???????????????????oBackup.SQLBackup(oSQLServer);

???????????????????
return?true;

??????????????}


??????????????
catch

??????????????
{

???????????????????
return?false;

???????????????????
throw;

??????????????}


??????????????
finally

??????????????
{

???????????????????oSQLServer.DisConnect();

??????????????}


?????????}


?

?????????
///?<summary>

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

?????????
///?</summary>


?????????
public?string?DbRestore(string?url)

?????????
{

??????????????
if(exepro()!=true)//執(zhí)行存儲(chǔ)過(guò)程

??????????????
{

???????????????????
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ù)庫(kù)失敗";

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

??????????????}


?

?????????}


?????}


}





本文轉(zhuǎn)自高海東博客園博客,原文鏈接:http://www.cnblogs.com/ghd258/archive/2006/02/28/339458.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的用asp.net还原与恢复sqlserver数据库(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。