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();
}
}
}
}
查看全文
相关阅读:
Android的webview的设置参数
禁止RecycleView滑动
Volley加载不出图片的问题
LIstview滑动时不加载图片,停止时加载!
【原创】设计模式开篇—面向对象的软件设计
[原创]写给自己的总结—2014到2015
【原创】开车分四个阶段的话,你属于哪个
【原创】亲身经历的几次合同陷阱
【转】程序员需谨记的8条团队开发原则
【转】绩效考核的10大误区
原文地址:https://www.cnblogs.com/ghd258/p/339458.html
最新文章
CentOS 7.0下使用yum安装MySQL
mac 下安装 mysql (蛋疼)
关于 easyui datagridfilter 中的combox 过滤
关于 modelNameLike 查询无数据
ubuntu 14.04 mysql 主从复制配置
mysql
jquerycombobox关联
mysql 绿色版登录命令
jdom解析
一个transaction
热门文章
今晚任务
查询某列是null的记录
hibernate update
关于Interget
Android 加载超长大图(长度超过4096)的解决方案和处理办法
Android 保留小数点后两位,并采取四舍五入
Android TextView控件显示Html文本,并引用的资源文件String。
Android 循环压缩图片内存大小控制指定范围内
Android studio 编译是报错Could not GET Received status code 400 from server: Bad Request
Android Studio 引入本地arr文件。
Copyright © 2011-2022 走看看