Backend/e-suite.WorkBench/eSuite.WorkBench/Services/DbService.cs
2026-01-20 21:50:10 +00:00

94 lines
3.0 KiB
C#

using eSuite.WorkBench.Services;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace e_suiteRunner.Services
{
public class DbService : IDbService
{
private string connectionString;
public DbService()
{
connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
}
public async Task DropDatabaseAsync()
{
SqlConnection con = new SqlConnection(connectionString);
string query = "DROP DATABASE esuite";
SqlCommand cmd = new SqlCommand(query, con);
try
{
await con.OpenAsync();
await cmd.ExecuteNonQueryAsync();
}
finally
{
await con.CloseAsync();
}
}
public async Task BackupDatabaseAsync()
{
bool folderExists = Directory.Exists($"C:\\eSuiteBackups");
if (!folderExists)
Directory.CreateDirectory($"C:\\eSuiteBackups");
var backupDirectory = $"C:\\eSuiteBackups\\{DateTime.UtcNow.Year}{DateTime.UtcNow.Month}{DateTime.UtcNow.Day}{DateTime.UtcNow.Ticks}-esuite-database-backup.bak";
SqlConnection con = new SqlConnection(connectionString);
string query = @$"BACKP DATABASE [esuite] TO DISK = N'{backupDirectory}'
WITH NOFORMAT,
NOINIT,
NAME = N'esuite-Full Database Backup',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10";
SqlCommand cmd = new SqlCommand(query, con);
try
{
await con.OpenAsync();
await cmd.ExecuteNonQueryAsync();
}
finally
{
await con.CloseAsync();
}
}
public IEnumerable<string> BackupsList()
{
bool folderExists = Directory.Exists($"C:\\eSuiteBackups");
if (!folderExists)
return new List<string>();
var files = Directory.GetFiles("C:\\eSuiteBackups");
return files.ToList();
}
public async Task RestoreDatabaseAsync(string backupName)
{
SqlConnection con = new SqlConnection(connectionString);
string query = @$"USE [master]
RESTORE DATABASE [esuite] FROM DISK = N'{backupName}'
WITH FILE = 1,
NOUNLOAD,
STATS = 5";
SqlCommand cmd = new SqlCommand(query, con);
try
{
await con.OpenAsync();
cmd.ExecuteNonQuery();
}
finally
{
await con.CloseAsync();
}
}
}
}