I am restoring a SQL database using C# code.When we are restore a backup using SQL server management studio we can chose the back up set.Can we do that using the code.
I used the following code
openFileDialog1.ShowDialog();
string databaseName = "TempDb";
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(openFileDialog1.FileName, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
DataConnection dataConnection = new DataConnection();
ServerConnection connection = new ServerConnection(dataConnection.DataBaseConnection);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
sqlRestore.Action = RestoreActionType.Database;
String dataFileLocation = db.FileGroups[0].Files[0].FileName;
String logFileLocation = db.LogFiles[0].FileName;
db = sqlServer.Databases[databaseName];
sqlServer.ConnectionContext.Disconnect();
RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);
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.PercentCompleteNotification = 10;
sqlRestore.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
Using the above code its only restore the first set.
Taking a look at Use all backup sets to restore database with SMO, it appears that
The important field is FileNumber on the Restore object. The default value is 1
You can get a list of Backupsetsusing the Restore.ReadBackupHeader method.
VB code from the link
res.Devices.AddDevice("C:\AdventureWorks2012Backup.BAK", DeviceType.File)
dt = res.ReadBackupHeader(srv)
For Each r As DataRow In dt.Rows
For Each c As DataColumn In dt.Columns
Console.WriteLine(c.ToString + " = " + r(c).ToString())
Next
Next
So once you know which backupset you want you can set
sqlRestore.FileNumber = YOUR_CHOSEN_SET;