备份数据库

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 }
posted on 2012-01-10 11:34  易尔购  阅读(1119)  评论(0编辑  收藏  举报