7

我正在使用System.Data.SQLite.dllSQLite 内存数据库。程序完成后,我想将内存数据库转储到 .db3 文件中以备下次使用。如何在 C# 中实现这一点?

4

1 回答 1

8

据我所知,System.Data.SQLite.dll 中没有内置功能来完成此操作。然而,该功能确实存在于与 SQLite 核心一起维护的 sqlite3.exe 客户端中。

这就是我使用 system.data.sqlite.dll 的方式:

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

    select sql from sqlite_master where name not like 'sqlite_%';
    
  2. 获取所有用户表的名称。

    select name 
    from sqlite_master 
    where type='table' and name not like 'sqlite_%';
    
  3. 在一些新的 SQLiteConnection 中创建磁盘数据库。

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

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

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

    attach 'ondisk.db3' as 'ondisk';
    
  7. 对于之前获得的每个用户表,将内容从内存复制到磁盘数据库。

    insert into ondisk.TableX select * from main.TableX;
    insert into ondisk.TableY select * from main.TableY;
    
于 2012-08-31T09:19:27.720 回答