Экспорт и импорт бэкапа БД
Делаю приложение для управления БД SQL Server.Мне нужно сделать кнопки импорта и экспорта бэкапов БД. Нашел примеры для MySql, но не знаю, как сделать похожее для SQL Server. В SQL Server бэкап имеет расширение .bak, а не .sql. SQlConnection я знаю как сделать:
SqlConnection connection = new SqlConnection(@"Data Source=LAPTOP-P14D9V4Q; Initial Catalog=Library; Integrated Security=True");
А вот как SQLBackup сделать аналогичный не знаю.
private void Import_Click(object sender, RoutedEventArgs e)
{
string file = @"C:\Users\Roman
Bulygin\RiderProjects\WpfApplication1\backup.sql";
using (var conn = DataBaseConnect.GetDBConnection())
{
using (SqlCommand cmd = new SqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
try
{
cmd.Connection = conn;
conn.Open();
mb.ImportFromFile(file);
conn.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
throw;
}
}
}
}
}
private void Export_Click(object sender, RoutedEventArgs e)
{
string file = @"C:\Users\Roman
Bulygin\RiderProjects\WpfApplication1\backup.sql";
using (var conn = DataBaseConnect.GetDBConnection())
{
using (SqlCommand cmd = new SqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
try
{
cmd.Connection = conn;
conn.Open();
mb.ExportToFile(file);
conn.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
throw;
}
}
}
}
}
}
Ответы (1 шт):
Забэкапить легко
using var connection = new SqlConnection(connectionString);
string dbName = "MyDatabase";
string path = "mydatabase.bak":
var query = $"BACKUP DATABASE {dbName} TO DISK = N'{path}'";
using var command = new SqlCommand(query, connection);
connection.Open();
command.ExecuteNonQuery();
А вот восстановление бэкапа это равносильно удалению из базы всех существующих в ней данных, и замене на данные из бэкапа. Я крайне не рекомендую это действие автоматизировать. Это действие надо выполнять крайне внимательно и только вручную.
Документация по восстановлению бэкапа используя TSQL запрос есть здесь. А запрос будет выглядеть как-то так RESTORE DATABASE {dbName} FROM DISK = N'{path}', но там куча опций и как правильно, я не разобрался.