zoukankan
html css js c++ java
用asp.net还原与恢复sqlserver数据库(转)
利用SQLDMO实现的,只要添加SQLDMO引用就好了,然后利用下边的类的方法就可以实现了。
我把原作者的类扩充了一下,可以自动识别web.config里 的数据库连接字符串,可以通过变量设置还原恢复的信息。
需要注意的时还原,还原的时候问题最大了,有别的用户使用数据库的时候无法还原,解决办法就是在MASTER数据库中添加一个存储过程:
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
在还原之前先执行这个存储过程,需要传递dbname,就是你的数据库的名字。下边是类的原代码:(web.config里的数据库连接字符串是constr)
using
System;
using
System.Configuration;
using
System.Data.SqlClient;
using
System.Data;
namespace
web.base_class
{
/**/
///
<summary>
///
DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
///
</summary>
public
class
DbOper
{
private
string
server;
private
string
uid;
private
string
pwd;
private
string
database;
private
string
conn;
/**/
///
<summary>
///
DbOper类的构造函数
///
</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>
///
数据库备份
///
</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
=
"
数据库备份
"
;
oBackup.Initialize
=
true
;
oBackup.SQLBackup(oSQLServer);
return
true
;
}
catch
{
return
false
;
throw
;
}
finally
{
oSQLServer.DisConnect();
}
}
/**/
///
<summary>
///
数据库恢复
///
</summary>
public
string
DbRestore(
string
url)
{
if
(exepro()
!=
true
)
//
执行存储过程
{
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
"
恢复数据库失败
"
;
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();
}
}
}
}
查看全文
相关阅读:
项目相关的风险要素及分类
IT从业人员必看的10个论坛(转)
Android Input设备debug技巧
Android中如何判断是否联网
paip.tree 生成目录树到txt后的折叠查看
hdu 4737 A Bit Fun
FLASH ROM与EEPROM的区别
Robot Framework学习路线
Distinguishing Between Embedded and General-Purpose Computing
服务的生命周期
原文地址:https://www.cnblogs.com/ghd258/p/339458.html
最新文章
SVN1.6服务端和客户端安装配置指导
ubuntu 环境变量配置
Mysql 连接查询 Mysql支持的连接查询有哪些
各种排序
Android 自动编译、打包生成apk文件 4
Python数据结构之二叉树
Shell中的if else语句小演示
求割顶模版
数据库优化小计
不积跬步,无以至千里
热门文章
Linux内核源代码解析之——我与神童聊Linux内核
java web从零单排第二十二期《hibernate》代码分析之查看,删除用户信息
C#中三种定时器对象的比较
高效前端优化工具--Fiddler入门教程
jquery文件上传控件 Uploadify
jQuery无刷新上传之uploadify简单试用
【工具推荐】ELMAH——可插拔错误日志工具
利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
项目开发流程标准
项目实施及管理标准
Copyright © 2011-2022 走看看