zoukankan
html css js c++ java
C# 数据库备份及还原
1
. 在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下:
取得数据库服务器列表:
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(
"
取数据库服务器列表出错:
"
+
e.Message)) ;
}
finally
{
sqlApp.Quit() ;
}
return
alServers ;
}
取得指定数据库服务器的数据库列表
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 e)
{
throw
(
new
Exception(
"
连接数据库出错:
"
+
e.Message)) ;
}
finally
{
svr.DisConnect() ;
sqlApp.Quit() ;
}
return
alDbs ;
}
2
. 数据库的备份和实时进度显示代码:
public
bool
BackUPDB(
string
strDbName,
string
strFileName, ProgressBar pgbMain)
{
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(
"
备份数据库失败
"
+
err.Message)) ;
}
finally
{
svr.DisConnect() ;
}
}
private
void
Step(
string
message,
int
percent)
{
PBar.Value
=
percent ;
}
其中,这两个语句实现了进度的实时显示:
SQLDMO.BackupSink_PercentCompleteEventHandler pceh
=
new
SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete
+=
pceh;
Step就是上面private
void
Step(
string
message,
int
percent) 的方法名称,它用来显示进度条的当前进度。
3
. 数据库的恢复和杀死进程的代码:
public
bool
RestoreDB(
string
strDbName,
string
strFileName, ProgressBar pgbMain)
{
PBar
=
pgbMain ;
SQLDMO.SQLServer svr
=
new
SQLDMO.SQLServerClass() ;
try
{
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(
"
恢复数据库失败,请关闭所有和该数据库连接的程序!
"
+
err.Message)) ;
}
finally
{
svr.DisConnect() ;
}
}
其中这个语句取得了所有的进程列表:
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) ;
}
查看全文
相关阅读:
前端基础知识1
mysql作业
mysql了解知识点
mysql3
数据库作业2
循环结构经典题型
计算1
猜数字游戏
css的显示
定位和position定位
原文地址:https://www.cnblogs.com/bobofsj11/p/1233799.html
最新文章
最短路之升降梯上
状压DP之吃奶酪
类状压之搜城探宝
agc045_c Range Set
洛谷 P5666 树的重心
agc045_b 01 Unbalanced
CodeForces 704B Ant Man
洛谷 P5291 [十二省联考2019]希望
SpringMVC请求参数获取
ES6扩展运算符
热门文章
ES6 map,filter ...等语法使用
vue跨域问题
字符串与数组的方法总结(包含ES6)
vue 插槽slot使用
ant design of vue 组件使用
小米商城头部
选择器和css
前端作业2
前端2
前端作业1
Copyright © 2011-2022 走看看