Step 1: Click New Project, then select Visual C# on the left, then Windows and then select Windows Forms Application. Name your project "RestoreDatabase" and then click OK
Step 2: Design your form as below

Step 3: Add references to Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.ConnectionInfoExtended, Microsoft.SqlServer.Smo, Microsoft.SqlServer.SmoExtended

Step 4: Add code to handle your form as below
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RestoreDatabase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnRestore_Click(object sender, EventArgs e)
{
progressBar.Value = 0;
try
{
//Init connect to sql database
Server dbServer = new Server(new ServerConnection(txtServer.Text, txtUsername.Text, txtPassword.Text));
Restore dbRestore = new Restore() { Database = txtDatabase.Text, Action = RestoreActionType.Database, ReplaceDatabase = true, NoRecovery = false };
dbRestore.Devices.AddDevice(@"C:\Data\Northwind.bak", DeviceType.File);
dbRestore.PercentComplete += DbRestore_PercentComplete;
dbRestore.Complete += DbRestore_Complete;
dbRestore.SqlRestoreAsync(dbServer);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void DbRestore_Complete(object sender, ServerMessageEventArgs e)
{
if (e.Error != null)
{
//Update status text
lblStatus.Invoke((MethodInvoker)delegate
{
lblStatus.Text = e.Error.Message;
});
}
}
private void DbRestore_PercentComplete(object sender, PercentCompleteEventArgs e)
{
//Update percent text & progress bar
progressBar.Invoke((MethodInvoker)delegate
{
progressBar.Value = e.Percent;
progressBar.Update();
});
lblPercent.Invoke((MethodInvoker)delegate
{
lblPercent.Text = $"{e.Percent}%";
});
}
}
}
VIDEO TUTORIALS