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) ;
}
查看全文
相关阅读:
.net framework 3.5 beta 2 / vs 2008 beta 2 有问题!
提交了 VS 2008 sp1 对 Linq to SQL 的 xml 字段类型支持的一个 bug
如何在 vista 的 iis 7 上面配置 asp.net 1.1 开发环境
Linq to sql 中如何进行 left join
Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
Scott Guthrie 写的 Silverlight 教程索引
利用 Xml Literal 功能复制一段 Xml
Silverlight 2 beta 2 bug 解决办法 (持续更新中)
C++使用内存映射文件入门
如何在C++项目中引用Lib文件(VS2005)
原文地址:https://www.cnblogs.com/bobofsj11/p/1233799.html
最新文章
《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记十九:监视和管理工具进阶(本书完)
《Microsoft SQL Server 2008 MDX Step by Step》学习笔记二:理解元组(Tuples)
适用于WinForm的一个定时器类
SQL Pass北京举办第四次线下活动,欢迎报名
SQL Server误区30日谈Day28有关大容量事务日志恢复模式的误区
SQL Server误区30日谈Day30有关备份的30个误区
微软下一代内存数据库Hekaton的演讲PPT
SQL Server误区30日谈Day27使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB
SQL Server OS的任务调度机制
SQL Server误区30日谈Day30有关备份的30个误区
热门文章
SQL Server误区30日谈Day26SQL Server中存在真正的“事务嵌套”
SQL Pass北京举办第三次线下活动,欢迎报名
SQL Server误区30日谈Day29有关堆碎片的误区
Silverlight + WCF 常见错误调试方法
[Silverlight] 用 IronPython 创建和调用用户控件
[Silverlight] Nikhil Kothari 的动画框架 Glitz(摘要)
[Silverlight] 写了两个方便 DOM 查找的扩展方法
Silverlight 文章收集
[Silverlight] 如何在 Worker thread 中更新 UI
几个微软产品组的团队网站地址
Copyright © 2011-2022 走看看