2012-08-31 16 views
6

Estoy usando System.Data.SQLite.dll para hacer uso de la base de datos en memoria SQLite. Después de que el programa termine, me gustaría volcar la base de datos en memoria en un archivo .db3 para el próximo uso. ¿Cómo puedo lograr esto en C#?¿Cómo volcar la base de datos en memoria de SQLite en un archivo con ADO.NET?

+0

aclarar por favor ... – Hassanation

+0

me gustaría código como: using (var conn = new SQLiteConnection("Data Source=:memory:") { conn.Open(); // do insert, update... // how to dump data into a file? conn.Close(); } xiagao1982

Respuesta

5

Que yo sepa no existe una funcionalidad incorporada para lograr esto en System.Data.SQLite.dll. Sin embargo, la funcionalidad existe en el cliente sqlite3.exe mantenido junto con el núcleo de SQLite.

Ésta es la forma en que lo haría con system.data.sqlite.dll:

  1. obtener declaraciones SQL para crear la nueva estructura de base de datos.

    select sql from sqlite_master where name not like 'sqlite_%'; 
    
  2. Obtenga los nombres de todas las tablas de usuarios.

    select name 
    from sqlite_master 
    where type='table' and name not like 'sqlite_%'; 
    
  3. Crear la base de datos en disco en alguna nueva SQLiteConnection.

  4. Ejecute todas las sentencias SQL obtenidas previamente para crear la estructura de la base de datos en la base de datos en disco.

  5. Cierre la conexión por separado a la base de datos en disco.

  6. Adjunte la base de datos en disco a la base de datos en memoria.

    attach 'ondisk.db3' as 'ondisk'; 
    
  7. Para cada tabla de usuario obtenido anteriormente, copiar el contenido de la memoria en la base de datos en el disco.

    insert into ondisk.TableX select * from main.TableX; 
    insert into ondisk.TableY select * from main.TableY; 
    
Cuestiones relacionadas