Sql server 使用新数据库名称从bak文件还原数据库

Sql server 使用新数据库名称从bak文件还原数据库,sql-server,sql-server-2008,smo,Sql Server,Sql Server 2008,Smo,我需要用新名称创建数据库副本。在我的asp.netmvc项目中,我使用smo创建数据库备份,然后尝试进行恢复。我确实喜欢这个: 但我有一个例外: 无法覆盖文件“C:\Program Files\Microsoft SQL Server\MSSQLS10\U 50.MSSQLSERVER\MSSQL\DATA\LocalClientTrakDB.mdf”。数据库“LocalClientTrakDB”正在使用它。 无法将文件“LocalClientTrakDB”还原为“C:\Program File

我需要用新名称创建数据库副本。在我的
asp.netmvc
项目中,我使用
smo
创建数据库备份,然后尝试进行恢复。我确实喜欢这个:

但我有一个例外:

无法覆盖文件“C:\Program Files\Microsoft SQL Server\MSSQLS10\U 50.MSSQLSERVER\MSSQL\DATA\LocalClientTrakDB.mdf”。数据库“LocalClientTrakDB”正在使用它。
无法将文件“LocalClientTrakDB”还原为“C:\Program Files\Microsoft SQL Server\MSSQLS10\U 50.MSSQLSERVER\MSSQL\DATA\LocalClientTrakDB.mdf”。与MOVE一起使用可标识文件的有效位置。
无法覆盖文件“C:\Program Files\Microsoft SQL Server\MSSQLS10\U 50.MSSQLSERVER\MSSQL\DATA\LocalClientTrakDB\u log.ldf”。数据库“LocalClientTrakDB”正在使用它。
无法将文件“LocalClientTrakDB_log”还原为“C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\LocalClientTrakDB_log.ldf”。与MOVE一起使用可标识文件的有效位置。
在规划RESTORE语句时发现了问题。以前的消息提供了详细信息。
还原数据库正在异常终止

还原数据库的我的代码:

static void DatabaseRestore(Server myServer, Database myDatabase)
{
    string newdbfilename = myDatabase.Name + "New";

    Restore restoreDB = new Restore();
    restoreDB.Database = newdbfilename;

    restoreDB.Action = RestoreActionType.Database;
    restoreDB.Devices.AddDevice(@"C:\temp\TestFullDB.bak", DeviceType.File);

    restoreDB.ReplaceDatabase = true;
    restoreDB.NoRecovery = false;

    restoreDB.SqlRestore(myServer);
}

您知道吗?

错误消息会告诉您问题所在(您无法覆盖现有数据库正在使用的文件)以及如何处理(使用
和MOVE
将恢复的文件放在其他位置)。那么您的困难到底是什么呢?如果我为数据库设置了新名称(具有此名称的数据库不存在),为什么会出现错误?您会出现错误,因为您只设置了一个逻辑数据库名称,但这不会影响物理文件的调用。因此,您需要同时执行这两项操作:定义一个新的逻辑数据库名称(您已经这样做了),还需要将文件移动到新位置/新名称。您的意思是我需要这样做:
restoreDB.RelocateFiles.Add(new RelocateFile(…