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) ;
}
查看全文
相关阅读:
ffmpeg通过组播udp推ts流
C# 多线程总结
《图解HTTP》6-首部
官网下载Java连接MySql驱动jar包
FineReport——JDBC 连接 MySQL 数据库
serializeArray()方式请求,php获取的方法
win10无线wifi总是掉线断网
C# Post请求中Json格式写法
Layui upload 上传有进度条
java 基于redis分布式锁
原文地址:https://www.cnblogs.com/bobofsj11/p/1233799.html
最新文章
JOOQ的模糊查询
Java泛型中extends和super的区别
java 8 LocalDate 获取某月第一天与最后天
MySQL错误1055 ONLY_FULL_GROUP_BY
mysql的 select count(distinct column)
好用的PHP高性能多并发restful的HTTP Client
vue4 项目的创建
three.js 数学方法之Box3
Guid.NewGuid().ToString()的几种格式
ASP.NET MVC中几种常用ActionResult
热门文章
PEP 3101 -- Advanced String Formatting(高级字符串格式化)
2020书单
源码安装vim8
源码安装python3.7
搭建gitbook
利用文件随机读取类RandomAccessFile做断点重读
JavaCV音视频转单声道16位16K赫兹小端点pcm音频
ffmpeg音视频转单声道16位16K赫兹小端点pcm音频
win10安装MinGW
mysql拒绝连接,提示连接数太多了Too many connections
Copyright © 2011-2022 走看看