用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 }