net core 使用orm sqlsugar 实现在线备份数据库并下载
- 安装 SqlSugar
在 .NET Core 中使用 SqlSugar,需要先安装 SqlSugar 包。可以通过 NuGet 包管理器或者 .NET CLI 进行安装。在本文中,我们使用 .NET CLI 安装 SqlSugar。
打开命令行窗口,进入项目根目录,输入以下命令安装 SqlSugar:
dotnet add package SqlSugar
- 配置数据库连接字符串
在 appsettings.json 文件中添加数据库连接字符串配置:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=mydatabase;User Id=myuser;Password=mypassword;"
}
}
- 创建备份文件夹
在项目根目录下创建一个名为 Backups 的文件夹,用于存放备份文件。
- 实现备份数据库
创建一个名为 BackupService 的服务类,用于备份数据库。该服务类需要注入 IConfiguration 和 IDbFactory 接口。
public class BackupService
{
private readonly IConfiguration _configuration;
private readonly IDbFactory _dbFactory;
public BackupService(IConfiguration configuration, IDbFactory dbFactory)
{
_configuration = configuration;
_dbFactory = dbFactory;
}
public async Task<string> BackupDatabase()
{
var connectionString = _configuration.GetConnectionString("DefaultConnection");
var databaseName = new SqlConnectionStringBuilder(connectionString).InitialCatalog;
var backupFileName = $"{databaseName}_{DateTime.Now:yyyyMMdd_HHmmss}.bak";
var backupPath = Path.Combine("Backups", backupFileName);
using var conn = _dbFactory.CreateConnection(connectionString);
await conn.OpenAsync();
using var cmd = conn.CreateCommand();
cmd.CommandText = $"BACKUP DATABASE [{databaseName}] TO DISK = '{backupPath}' WITH INIT";
await cmd.ExecuteNonQueryAsync();
return backupFileName;
}
}
该方法会创建备份文件名,并将备份文件存放在 Backups 文件夹中。然后,使用 SqlCommand 执行备份数据库的 SQL 命令。
- 实现下载备份文件
创建一个名为 BackupController 的控制器类,用于提供下载备份文件的接口。该控制器类需要注入 BackupService。
[ApiController]
[Route("api/[controller]")]
public class BackupController : ControllerBase
{
private readonly BackupService _backupService;
public BackupController(BackupService backupService)
{
_backupService = backupService;
}
[HttpGet]
public async Task<IActionResult> DownloadBackup()
{
var backupFileName = await _backupService.BackupDatabase();
var backupPath = Path.Combine("Backups", backupFileName);
var memoryStream = new MemoryStream();
using (var stream = new FileStream(backupPath, FileMode.Open))
{
await stream.CopyToAsync(memoryStream);
}
memoryStream.Position = 0;
return File(memoryStream, "application/octet-stream", backupFileName);
}
}
该方法会调用 BackupService 的 BackupDatabase 方法备份数据库,并返回备份文件的路径。然后,使用 FileStream 读取备份文件,并将备份文件写入 MemoryStream 中。最后,使用 File 方法返回下载文件的结果
原文地址: https://www.cveoy.top/t/topic/eEkR 著作权归作者所有。请勿转载和采集!