2013-05-13 43 views
2

我想減少在本地機器上創建數據庫的工作量,方法是恢復一個空的數據庫而不是創建它通過SQL。從「c: Program Files Microsoft SQL ... Backup」以外的路徑恢復MS SQL數據庫

這是到目前爲止我的代碼(DataAccess.ApplicationDirectory爲 「C:\ ProgramData \ RC車輛管理\」):

public static void CreateLocalDatabase() { 
     const String emptyDatabaseFileName = "EmptyDatabase.bak"; 

     if(Directory.Exists(DataAccess.ApplicationDirectory) == false) { 
      Directory.CreateDirectory(DataAccess.ApplicationDirectory); 
     } 
     File.WriteAllBytes(Path.Combine(DataAccess.ApplicationDirectory + emptyDatabaseFileName), Resources.RcVehicleManagement); 

     using (SqlConnection sqlConnection = DataAccess.LocalMachineConnection()) { 
      sqlConnection.Open(); 
      using (SqlCommand sqlCommand = new SqlCommand("RESTORE DATABASE [@localDatabaseName] " + 
                  "FROM DISK = '@emptyDatabasePath' " + 
                  "WITH NOUNLOAD, REPLACE", sqlConnection)) { 
       sqlCommand.Parameters.Add("@localDatabaseName", System.Data.SqlDbType.VarChar).Value = DataAccess.LocalDatabaseConnectionString.InitialCatalog; 
       sqlCommand.Parameters.Add("@emptyDatabasePath", System.Data.SqlDbType.VarChar).Value = Path.Combine(DataAccess.ApplicationDirectory, emptyDatabaseFileName); 

       sqlCommand.ExecuteNonQuery(); 
      } 
     } 
    } 

但在執行的時候,我得到以下異常(在「sqlCommand.ExecuteNonQuery ();「):

Cannot open backup device 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\@emptyDatabasePath'. 
Operating system error 2(failed to retrieve text for this error. Reason: 15105). 
RESTORE DATABASE is terminating abnormally. 

我不知道爲什麼它想從中獲取備份 」C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL10_50.MSSQLSERVER \ MSSQL \備份「,路徑我declar會是「C:\ ProgramData \ RC Vehicle Management \ EmptyDatabase.bak」

我該怎麼做? 還是隻能從「c:\ Program Files \ Microsoft SQL ... \ Backup」以外的路徑中恢復?

回答

3

我發現這個問題,你不能在參數周圍使用括號或引號。

這工作:

SqlCommand sqlCommand = new SqlCommand("RESTORE DATABASE @localDatabaseName " + 
             "FROM DISK = @emptyDatabasePath " + 
             "WITH NOUNLOAD, REPLACE", sqlConnection) 
+0

這是非常有選擇性的引用。在說明之後,您可以閱讀:_「有關詳細信息,請參閱本主題後面的」將文件和文件組恢復到新位置「 」_。 – CodeCaster 2013-05-13 11:06:04

+0

這是正確的,但我現在找到了解決方案。 – Drasive 2013-05-13 11:18:03