博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#代码备份还原MSSQL数据库
阅读量:6478 次
发布时间:2019-06-23

本文共 3242 字,大约阅读时间需要 10 分钟。

备份数据库

1
///
<summary>
2
///
备份配置文件config.xml中数据库
3
///
</summary>
4
///
<param name="backupFolder">
备份文件路径
</param>
5
///
<returns></returns>
6
public
static
bool
DataBackupConfigDB(
string
backupFolder)
7
{
8
//
获取配置文件中sql数据库名
9
string
dbName
=
"
SqlDB
"
;
10
string
name
=
dbName
+
DateTime.Now.ToString(
"
yyyyMMddHHmmss
"
);
11
string
procname;
12
string
sql;
13
//
创建连接对象
14
SqlConnection conn
=
new
SqlConnection(GetConnStr());
15
conn.Open();
//
打开数据库连接
16
//
删除逻辑备份设备,但不会删掉备份的数据库文件
17
procname
=
"
sp_dropdevice
"
;
18
SqlCommand sqlcmd1
=
new
SqlCommand(procname, conn);
19
sqlcmd1.CommandType
=
CommandType.StoredProcedure;
20
SqlParameter sqlpar
=
new
SqlParameter();
21
sqlpar
=
sqlcmd1.Parameters.Add(
"
@logicalname
"
, SqlDbType.VarChar,
20
);
22
sqlpar.Direction
=
ParameterDirection.Input;
23
sqlpar.Value
=
dbName;
24
try
//
如果逻辑设备不存在,略去错误
25
{
26
sqlcmd1.ExecuteNonQuery();
27
}
28
catch
29
{
30
MessageBox.Show(
"
错误的备份文件目录
"
);
31
}
32
//
创建逻辑备份设备
33
procname
=
"
sp_addumpdevice
"
;
34
SqlCommand sqlcmd2
=
new
SqlCommand(procname, conn);
35
sqlcmd2.CommandType
=
CommandType.StoredProcedure;
36
sqlpar
=
sqlcmd2.Parameters.Add(
"
@devtype
"
, SqlDbType.VarChar,
20
);
37
sqlpar.Direction
=
ParameterDirection.Input;
38
sqlpar.Value
=
"
disk
"
;
39
sqlpar
=
sqlcmd2.Parameters.Add(
"
@logicalname
"
, SqlDbType.VarChar,
20
);
//
逻辑设备名
40
sqlpar.Direction
=
ParameterDirection.Input;
41
sqlpar.Value
=
dbName;
42
sqlpar
=
sqlcmd2.Parameters.Add(
"
@physicalname
"
, SqlDbType.NVarChar,
260
);
//
物理设备名
43
sqlpar.Direction
=
ParameterDirection.Input;
44
sqlpar.Value
=
backupFolder
+
name
+
"
.bak
"
;
45
try
46
{
47
int
i
=
sqlcmd2.ExecuteNonQuery();
48
}
49
catch
(Exception err)
50
{
51
string
str
=
err.Message;
52
}
53
//
备份数据库到指定的数据库文件(完全备份)
54
sql
=
"
BACKUP DATABASE
"
+
dbName
+
"
TO
"
+
dbName
+
"
WITH INIT
"
;
55
SqlCommand sqlcmd3
=
new
SqlCommand(sql, conn);
56
sqlcmd3.CommandType
=
CommandType.Text;
57
try
58
{
59
sqlcmd3.ExecuteNonQuery();
60
}
61
catch
(Exception err)
62
{
63
string
str
=
err.Message;
64
conn.Close();
65
return
false
;
66
}
67
conn.Close();
//
关闭数据库连接
68
return
true
;
69
}
复制代码

还原数据库时如果使用RESTORE DATABASE dbName(数据库名) from DISK = 'e:\' to replace

sql错误提示:RESTORE 无法处理数据库dbName 因为它正由此会话使用 建议在执行此操作时使用 master 数据库

在网上终于找到了解决方法,具体代码如下:

1
///
<summary>
2
 
///
还原数据库文件
3
 
///
</summary>
4
 
///
<param name="dbFile">
数据库备份文件(含路径)
</param>
5
 
///
<returns></returns>
6
 
public
static
bool
DataRestoreConfigDB(
string
dbFile)
7
{
8
//
sql数据库名
9
string
dbName
=
"
SqlDB
"
;
10
//
创建连接对象
11
SqlConnection conn
=
new
SqlConnection(GetConnStr());
12
//
还原指定的数据库文件
13
string
sql
=
string
.Format(
"
use master ;declare @s varchar(8000);select @s=isnull(@s,'')+' kill '+rtrim(spID) from master..sysprocesses where dbid=db_id('{0}');select @s;exec(@s) ;RESTORE DATABASE {1} FROM DISK = N'{2}' with replace
"
,dbName,dbName,dbFile);
14
SqlCommand sqlcmd
=
new
SqlCommand(sql, conn);
15
sqlcmd.CommandType
=
CommandType.Text;
16
conn.Open();
17
try
18
{
19
sqlcmd.ExecuteNonQuery();
20
}
21
catch
(Exception err)
22
{
23
string
str
=
err.Message;
24
conn.Close();
25
return
false
;
26
}
27
conn.Close();
//
关闭数据库连接
28
return
true
;
29
}
复制代码

转载于:https://www.cnblogs.com/12go/archive/2012/01/10/2317944.html

你可能感兴趣的文章
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>