如何使用ADO.NET将SQLite内存数据库转储到文件中?

xia*_*982 6 c# sqlite system.data.sqlite

我正在使用System.Data.SQLite.dllSQLite内存数据库.程序完成后,我想将内存数据库转储到.db3文件中以供下次使用.我怎样才能在C#中实现这一目标?

小智 6

据我所知,在System.Data.SQLite.dll中没有内置功能来完成此任务.但是,与SQLite核心一起维护的sqlite3.exe客户端中存在该功能.

这是我用system.data.sqlite.dll做的方法:

  1. 获取SQL语句以创建新的数据库结构.

    select sql from sqlite_master where name not like 'sqlite_%';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 获取所有用户表的名称.

    select name 
    from sqlite_master 
    where type='table' and name not like 'sqlite_%';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在一些新的SQLiteConnection中创建磁盘数据库.

  4. 执行所有以前获取的SQL语句,以在磁盘数据库中创建数据库结构.

  5. 关闭与磁盘数据库的单独连接.

  6. 将磁盘数据库附加到内存数据库.

    attach 'ondisk.db3' as 'ondisk';
    
    Run Code Online (Sandbox Code Playgroud)
  7. 对于先前获取的每个用户表,将内容从内存中复制到磁盘上数据库.

    insert into ondisk.TableX select * from main.TableX;
    insert into ondisk.TableY select * from main.TableY;
    
    Run Code Online (Sandbox Code Playgroud)