C#实现SQL数据库备份与恢复

  用Sql语句实现备份与还原操作时,最好不要使用需要备份或还原的数据库连接,而使用master,否则可能会出现如下三个问题:(1)超时时间已到。在操作完成之前超时时间已过或服务器未响应。(2)  在向服务器发送请求时发生传输级错误。(provider:共享内存提供程序,error:0-系统无法打开文件。)  (3)从服务器接收结果时发生传输级错误。(provider:共享内存提供程序,error:0   -   系统无法打开文件。) 

  还原或删除sql server数据库时,经常会出现:“因为数据库正在使用,所以无法获得对数据库的独占访问权”,解决方法是在还原语句前执行"Alter database BookShop Set Offline With rollback immediate”,还原语句后执行“Alter database BookShop Set Online With Rollback immediate”。

 1 using System;
 2 using System.Data;
 3 using System.Data.SqlClient;
 4 
 5 namespace Util
 6 {
 7     class DbHelper
 8     {
 9         public static string DbName { get; set; }
10 
11         private static SqlConnection SqlConnection = new SqlConnection("data source=.;Initial Catalog=master;integrated security=SSPI;");
12         private static string SqlBackup = "BACKUP DATABASE BookShop TO DISK = 'F:\\ms\\src\\InternetBookstore\\DB\\" + DbName + ".bak'";
13         private static string SqlRestore = "Alter database BookShop Set Offline With rollback immediate RESTORE DATABASE BookShop FROM DISK = 'F:\\ms\\src\\InternetBookstore\\DB\\" + DbName + ".bak' Alter database BookShop Set Online With Rollback immediate";
14         private SqlCommand SqlCommandBackup     = new SqlCommand() { Connection = SqlConnection, CommandType = CommandType.Text, CommandText = SqlBackup };
15         private SqlCommand SqlCommandRestore    = new SqlCommand() { Connection = SqlConnection, CommandType = CommandType.Text, CommandText = SqlRestore };
16 
17         public void DbBackup()
18         {
19             SqlConnection.Open();
20             try
21             {
22                 SqlCommandBackup.ExecuteNonQuery();
23             }
24             catch (Exception e)
25             {
26                 string str = e.Message;
27                 SqlConnection.Close();
28             }
29             SqlConnection.Close();
30         }
31 
32         public void DbRestore()
33         {
34             SqlConnection.Open();
35             try
36             {
37                 SqlCommandRestore.ExecuteNonQuery();
38             }
39             catch (Exception e)
40             {
41                 string str = e.Message;
42                 SqlConnection.Close();
43             }
44             SqlConnection.Close();
45         }
46     }
47 }

猜你喜欢

转载自www.cnblogs.com/bravestarr/p/10598067.html