C#代码备份还原MSSQL数据库

本文详细介绍了如何备份和还原数据库,包括配置文件备份、逻辑设备删除、逻辑备份设备创建、数据库备份操作以及还原数据库文件的步骤。通过使用C#编程实现备份与还原功能,并解决了在还原过程中出现的错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备份数据库

1///<summary>
2/// 备份配置文件config.xml中数据库
3///</summary>
4///<param name="backupFolder">备份文件路径</param>
5///<returns></returns>
6publicstaticbool DataBackupConfigDB(string backupFolder)
7 {
8//获取配置文件中sql数据库名
9string dbName ="SqlDB";
10string name = dbName + DateTime.Now.ToString("yyyyMMddHHmmss");
11string procname;
12string 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;
24try//如果逻辑设备不存在,略去错误
25 {
26 sqlcmd1.ExecuteNonQuery();
27 }
28catch
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";
45try
46 {
47int i = sqlcmd2.ExecuteNonQuery();
48 }
49catch (Exception err)
50 {
51string 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;
57try
58 {
59 sqlcmd3.ExecuteNonQuery();
60 }
61catch (Exception err)
62 {
63string str = err.Message;
64 conn.Close();
65returnfalse;
66 }
67 conn.Close();//关闭数据库连接
68returntrue;
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  publicstaticbool 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 returnfalse;
26 }
27 conn.Close();//关闭数据库连接
28 returntrue;
29 }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值