How to recover using the Microsoft.SqlServer.Management.Smo namespace recovery class

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(); } 

When calling this method, the restore operation failed with this message

Recovery error for server 'MDM04 \ SQLEXPRESS'.

mdm04 is my computer name

internal exception

"System.Data.SqlClient.SqlError: The logical file 'vrv' is not part of the database 'vrv'. Use FILELISTONLY RECOVERY to display the logical file names."

vrv - database name

What should I do to restore a file

+4
source share
2 answers

Problem here

 sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation)); sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation)); 

here databaseName means the database name specified in the db backup file. But you specify the destination db name.

Change it to the original db name

here is sample code for reading db names from backup file

 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 
+15
source

Now go to the browse tab and view the following path:

C: \ Program Files \ Microsoft SQL Server \ 100 \ SDK \ Assemblies OR C: \ Program Files \ Microsoft SQL Server \ 110 \ SDK \ Assemblies

Now select the following dlls

Microsoft.SqlServer.ConnectionInfo.dll

Microsoft.SqlServer.Management.Sdk.Sfc.dll

Microsoft.SqlServer.Smo.dll

Microsoft.SqlServer.SmoExtended.dll

Microsoft.SqlServer.SqlEnum.dll

  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(); } 
0
source

All Articles