Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#和smo恢复数据库_C#_Asp.net_C# 4.0_Sql Server 2012_Smo - Fatal编程技术网

使用c#和smo恢复数据库

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

我正在尝试使用以下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 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));