使用c#和smo恢复数据库
我正在尝试使用以下c#代码将sql server.bak还原到空数据库中: 我得到以下错误:使用c#和smo恢复数据库,c#,asp.net,c#-4.0,sql-server-2012,smo,C#,Asp.net,C# 4.0,Sql Server 2012,Smo,我正在尝试使用以下c#代码将sql server.bak还原到空数据库中: 我得到以下错误: Microsoft.SqlServer.Management.Smo.FailedOperationException: Restore failed for Server 'IM-M4500\SQLEXPRESS'. ---> Microsoft.SqlServer.Management.Smo.SmoException: System.Data.SqlClient.SqlError: The
Microsoft.SqlServer.Management.Smo.FailedOperationException: Restore failed for Server 'IM-M4500\SQLEXPRESS'. ---> Microsoft.SqlServer.Management.Smo.SmoException: System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing 'new-test-44444' database
是的,它保存不同的备份,我想覆盖和替换它,还想将mdf和日志文件移动到新文件中。我是否在恢复选项中遗漏了什么
非常感谢
Ismail不要创建新数据库并尝试在其上还原。而是使用下面的查询
RESTORE DATABASE dbname from disk='location' WITH MOVE 'data' TO 'name.mdf' MOVE '_Log' TO 'name_log.ldf'
要替换现有数据库,请将其名称放在dbname上,并在查询中与Replace一起使用确定修复了我需要为其指定当前db逻辑文件名的问题。我实际做的是为其指定新的db逻辑文件名,因此
//get the logical file names
DataTable dtFileList = restore.ReadFileList(smoServer);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string logLogicalName = dtFileList.Rows[1][0].ToString();
restore.RelocateFiles.Add(GetRelocateFile(dbLogicalName, dbPath));
restore.RelocateFiles.Add(GetRelocateFile(logLogicalName, logPath));
这很有效。Danson,谢谢你的回复。为了给你们更多的信息,我有一个用户填写表单的过程,它为他们创建一个iis网站和新的空白数据库。在此过程之后,如果他们有一个现有的数据库,我希望他们能够恢复该数据库。创建过程使用站点和数据库的命名约定,我希望保持这种约定,并在新创建的数据库上重写数据库。使用tsql没有办法做到这一点吗?我尝试了您的sql,但仍然出现相同的错误。谢谢伊斯梅尔
//get the logical file names
DataTable dtFileList = restore.ReadFileList(smoServer);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string logLogicalName = dtFileList.Rows[1][0].ToString();
restore.RelocateFiles.Add(GetRelocateFile(dbLogicalName, dbPath));
restore.RelocateFiles.Add(GetRelocateFile(logLogicalName, logPath));