2013-05-13 39 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