Step 1: Click New Project, then select Visual C# on the left, then Windows and then select Windows Forms Application. Name your project "BackupDatabase" 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
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 BackupDatabase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnBackup_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));
Backup dbBackup = new Backup() { Action = BackupActionType.Database, Database = txtDatabase.Text };
dbBackup.Devices.AddDevice(@"C:\Data\Northwind.bak", DeviceType.File);
dbBackup.Initialize = true;
dbBackup.PercentComplete += DbBackup_PercentComplete;
dbBackup.Complete += DbBackup_Complete;
dbBackup.SqlBackupAsync(dbServer);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void DbBackup_Complete(object sender, ServerMessageEventArgs e)
{
if (e.Error != null)
{
//Update status with multiple threads
lblStatus.Invoke((MethodInvoker)delegate
{
lblStatus.Text = e.Error.Message;
});
}
}
private void DbBackup_PercentComplete(object sender, PercentCompleteEventArgs e)
{
//Update percentage, progressbar
progressBar.Invoke((MethodInvoker)delegate
{
progressBar.Value = e.Percent;
progressBar.Update();
});
lblPercent.Invoke((MethodInvoker)delegate
{
lblPercent.Text = $"{e.Percent}%";
});
}
}
}
VIDEO TUTORIALS