sqlite数据库备份

浪淘沙2周前后端27
  public IActionResult OnPostBf()
  {
      var db = App.GetService<SqlSugar.ISqlSugarClient>();      var connStr = db.CurrentConnectionConfig.ConnectionString;      var builder = new SqliteConnectionStringBuilder(connStr);      // 原数据库
      var dbFile = builder.DataSource;      //数据库名称
      var dbName = Path.GetFileName(dbFile);      // 数据库密码                       
      var password = builder.Password;      var dbFullPath = Path.Combine(
          App.WebHostEnvironment.ContentRootPath,          dbFile.Replace('/', Path.DirectorySeparatorChar));      // 备份文件
      var backupDir = Path.Combine(
          App.WebHostEnvironment.ContentRootPath,          "App_Data",          "Backup");      Directory.CreateDirectory(backupDir);      var backupFile = Path.Combine(
          backupDir,          $"{Path.GetFileNameWithoutExtension(dbName)}_{DateTime.Now:yyyyMMddHHmmss}.db");      // 源数据库
      var sourceBuilder = new SqliteConnectionStringBuilder()
      {
          DataSource = dbFullPath,
          Password = password,
          Mode = SqliteOpenMode.ReadWrite,
          Cache = SqliteCacheMode.Shared      };      // 目标数据库
      var destBuilder = new SqliteConnectionStringBuilder()
      {
          DataSource = backupFile,
          Password = password
      };      // 创建备份
      using (var source = new SqliteConnection(sourceBuilder.ConnectionString))
      using (var dest = new SqliteConnection(destBuilder.ConnectionString))
      {
          source.Open();          dest.Open();          source.BackupDatabase(dest);          // 强制关闭连接
          dest.Close();          source.Close();      }


      // 清理 SQLite 连接池
      SqliteConnection.ClearAllPools();      // 等待 Windows 释放文件锁
      GC.Collect();      GC.WaitForPendingFinalizers();      // 给 SQLCipher 一点释放时间
      System.Threading.Thread.Sleep(500);      // 下载
      var fileStream = new FileStream(
          backupFile,          FileMode.Open,          FileAccess.Read,          FileShare.ReadWrite,          bufferSize: 1024 * 64,          useAsync: true);      return File(
          fileStream,          "application/octet-stream",          Path.GetFileName(backupFile));  }


相关文章

Aspose.Words 插入图片

        #region 创建 Word 文档   &...

asp.net core ZipDeploy iis发布 忽略某一件文件夹被删除

  services.AddZipDeploy(o => o.IgnorePathStarting("wwwroot/")); //iis发布...

常用查询

 var dt = _db.SqlQueryable<object>("select * from mszs...

asp.net core [BindProperty] 用法

在 ASP.NET Core 中,[BindProperty] 是一种用于绑定模型属性的特性,通常与 Razor 页面配合使用。它会自动将请求中的表单数据绑定到页面模型的属性上,简化了手动从 Requ...

asp.net core razor OnGet 异步写法

public async Task<IActionResult> OnGetAsync() {     var&n...

asp.net core多按钮提交实现

<form method="post">     <button type="submit...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。