如何使用Microsoft.SqlServer.Management.Smo命名空间的还原类进行还原

Siv*_*ran 4 c# sql-server-2005

public void  RestoreDatabase(String databaseName, String filePath, 
            String serverName, String userName, String password, String dataFilePath, String logFilePath)
{
    Restore sqlRestore = new Restore();
    BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = dataFilePath;
    String logFileLocation = logFilePath; 
    db = sqlServer.Databases[databaseName];
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete +=new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

在调用此方法时,还原操作因此消息而失败

服务器'MDM04\SQLEXPRESS'的恢复失败.

mdm04是我的电脑名称

内在的例外是

"System.Data.SqlClient.SqlError:逻辑文件'vrv'不是数据库'vrv'的一部分.使用RESTORE FILELISTONLY列出逻辑文件名."

vrv是数据库名称

我该怎么做才能恢复文件

Ram*_*Vel 15

问题在这里

sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
Run Code Online (Sandbox Code Playgroud)

这里databaseName表示db备份文件中指定的数据库的名称.但是您要指定目标数据库名称.

将其更改为原始数据库名称

这里是从备份文件中读取db名称的示例代码

DataTable dtFileList = sqlRestore.ReadFileList(serverName);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string dbPhysicalName = dtFileList.Rows[0][1].ToString();
string logLogicalName = dtFileList.Rows[1][0].ToString();
string logPhysicalName = dtFileList.Rows[1][1].ToString
Run Code Online (Sandbox Code Playgroud)