在ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)庫備份和恢復(fù)功能
2024-07-10 13:05:52
供稿:網(wǎng)友
using system;
using sqldmo;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
namespace bakserve040907
{
/// <summary>
/// 數(shù)據(jù)庫備份類說明
/// </summary>
public class bakserver
{
string servername; //數(shù)據(jù)服務(wù)器名稱
string username; //用戶名稱
string password; //用戶密碼
string message; //消息提示
progressbar pbar; //狀態(tài)條控件
public bakserver()
{
}
/// <summary>
/// 取得數(shù)據(jù)庫服務(wù)器列表
/// </summary>
/// <returns>數(shù)據(jù)庫服務(wù)器列表</returns>
public arraylist getserverlist()
{
arraylist alservers = new arraylist() ;
sqldmo.application sqlapp = new sqldmo.applicationclass() ;
try
{
sqldmo.namelist serverlist = sqlapp.listavailablesqlservers() ;
for(int i = 1;i<= serverlist.count;i++)
{
alservers.add(serverlist.item(i)) ;
}
}
catch(exception e)
{
// throw(new exception("取數(shù)據(jù)庫服務(wù)器列表出錯(cuò):"+e.message)) ;
message = "取數(shù)據(jù)庫服務(wù)器列表出錯(cuò):" +e.message;
}
finally
{
sqlapp.quit() ;
}
return alservers ;
}
/// <summary>
/// 錯(cuò)誤消息處理
/// </summary>
/// <returns>消息信息</returns>
public string msg()
{
return message;
}
/// <summary>
/// 取得指定數(shù)據(jù)庫列表
/// </summary>
/// <param name="strservername">服務(wù)器名稱</param>
/// <param name="strusername">用戶名稱</param>
/// <param name="strpwd">用戶密碼</param>
/// <returns>數(shù)據(jù)庫列表</returns>
public arraylist getdblist(string strservername,string strusername,string strpwd)
{
servername = strservername ;
username = strusername ;
password = strpwd ;
arraylist aldbs = new arraylist() ;
sqldmo.application sqlapp = new sqldmo.applicationclass() ;
sqldmo.sqlserver svr = new sqldmo.sqlserverclass() ;
try
{
svr.connect(servername,username,password) ;
foreach(sqldmo.database db in svr.databases)
{
if(db.name!=null)
aldbs.add(db.name) ;
}
}
catch(exception err)
{
// throw(new exception("連接數(shù)據(jù)庫出錯(cuò):"+e.message)) ;
message = "連接數(shù)據(jù)庫出錯(cuò):" +err.message;
}
finally
{
svr.disconnect() ;
sqlapp.quit() ;
}
return aldbs ;
}
//數(shù)據(jù)庫的備份和實(shí)時(shí)進(jìn)度顯示代碼:
/// <summary>
/// 數(shù)據(jù)庫的備份和實(shí)時(shí)進(jìn)度顯示
/// </summary>
/// <param name="strdbname">數(shù)據(jù)庫名稱</param>
/// <param name="strfilename">備份文件名</param>
/// <param name="pgbmain">狀態(tài)條控件名稱</param>
/// <param name="strservername">服務(wù)器名稱</param>
/// <param name="strusername">用戶名稱</param>
/// <param name="strpwd">密碼</param>
/// <returns>備份成功返回true ,否則返回false</returns>
public bool backupdb(string strdbname,string strfilename, progressbar pgbmain,string strservername,string strusername,string strpwd)
{
servername = strservername ;
username = strusername ;
password = strpwd ;
pbar = pgbmain;
sqldmo.sqlserver svr = new sqldmo.sqlserverclass() ;
try
{
svr.connect(servername,username,password) ;
sqldmo.backup bak = new sqldmo.backupclass();
bak.action = 0 ;
bak.initialize = true ;
sqldmo.backupsink_percentcompleteeventhandler pceh = new sqldmo.backupsink_percentcompleteeventhandler(step);
bak.percentcomplete += pceh;
bak.files = strfilename;
bak.database = strdbname;
bak.sqlbackup(svr);
return true ;
}
catch(exception err)
{
// throw(new exception("備份數(shù)據(jù)庫失敗"+err.message)) ;
message = "備份數(shù)據(jù)庫失敗:" +err.message;
return false ;
}
finally
{
svr.disconnect() ;
}
}
/// <summary>
/// 顯示進(jìn)度條的當(dāng)前進(jìn)度
/// </summary>
/// <param name="message"></param>
/// <param name="percent"></param>
private void step(string message,int percent)
{
pbar.value = percent ;
}
// 其中,這兩個(gè)語句實(shí)現(xiàn)了進(jìn)度的實(shí)時(shí)顯示:
// sqldmo.backupsink_percentcompleteeventhandler pceh = new sqldmo.backupsink_percentcompleteeventhandler(step);
// bak.percentcomplete += pceh;
// step就是上面private void step(string message,int percent) 的方法名稱,它用來顯示進(jìn)度條的當(dāng)前進(jìn)度。
/// <summary>
/// 數(shù)據(jù)庫的恢復(fù)和殺死進(jìn)程
/// </summary>
/// <param name="strdbname">數(shù)據(jù)庫名稱</param>
/// <param name="strfilename">備份文件名</param>
/// <param name="pgbmain">狀態(tài)條控件名稱</param>
/// <param name="strservername">服務(wù)器名稱</param>
/// <param name="strusername">用戶名稱</param>
/// <param name="strpwd">密碼</param>
/// <returns>恢復(fù)成功返回true ,否則返回false</returns>
public bool restoredb(string strdbname,string strfilename, progressbar pgbmain,string strservername,string strusername,string strpwd )
{
pbar = pgbmain ;
sqldmo.sqlserver svr = new sqldmo.sqlserverclass() ;
try
{
servername = strservername ;
username = strusername ;
password = strpwd ;
svr.connect(servername,username,password) ;
sqldmo.queryresults qr = svr.enumprocesses(-1) ;
int icolpidnum = -1 ;
int icoldbname = -1 ;
for(int i=1;i<=qr.columns;i++)
{
string strname = qr.get_columnname(i) ;
if (strname.toupper().trim() == "spid")
{
icolpidnum = i ;
}
else if (strname.toupper().trim() == "dbname")
{
icoldbname = i ;
}
if (icolpidnum != -1 && icoldbname != -1)
break ;
}
for(int i=1;i<=qr.rows;i++)
{
int lpid = qr.getcolumnlong(i,icolpidnum) ;
string strdbname = qr.getcolumnstring(i,icoldbname) ;
if (strdbname.toupper() == strdbname.toupper())
svr.killprocess(lpid) ;
}
sqldmo.restore res = new sqldmo.restoreclass() ;
res.action = 0 ;
sqldmo.restoresink_percentcompleteeventhandler pceh = new sqldmo.restoresink_percentcompleteeventhandler(step);
res.percentcomplete += pceh;
res.files = strfilename ;
res.database = strdbname ;
res.replacedatabase = true ;
res.sqlrestore(svr) ;
return true ;
}
catch(exception err)
{
// throw(new exception("恢復(fù)數(shù)據(jù)庫失敗,請(qǐng)關(guān)閉所有和該數(shù)據(jù)庫連接的程序!"+err.message)) ;
message = "恢復(fù)數(shù)據(jù)庫失敗,請(qǐng)關(guān)閉所有和該數(shù)據(jù)庫連接的程序!" +err.message;
return false;
}
finally
{
svr.disconnect() ;
}
}
}
}
網(wǎng)站運(yùn)營seo文章大全提供全面的站長運(yùn)營經(jīng)驗(yàn)及seo技術(shù)!