2012-08-31 3 views
6

Ich verwende System.Data.SQLite.dll, um die In-Memory-SQLite-Datenbank zu verwenden. Nachdem das Programm beendet ist, möchte ich die In-Memory-Datenbank in eine .db3-Datei für die nächste Verwendung ausgeben. Wie kann ich dies in C# erreichen?Wie delete SQLite In-Memory-Datenbank in Datei mit ADO.NET?

+0

klären bitte ... – Hassanation

+0

ich wie kodieren möchte: using (var conn = new SQLiteConnection("Data Source=:memory:") { conn.Open(); // do insert, update... // how to dump data into a file? conn.Close(); } xiagao1982

Antwort

5

Nach meinem besten Wissen gibt es keine integrierte Funktionalität, um dies in System.Data.SQLite.dll zu erreichen. Die Funktionalität existiert jedoch im Client sqlite3.exe, der zusammen mit dem SQLite-Kern gepflegt wird.

Dies ist, wie ich es mit system.data.sqlite.dll tun würde:

  1. SQL-Anweisungen erhalten neue Datenbankstruktur zu erstellen.

    select sql from sqlite_master where name not like 'sqlite_%'; 
    
  2. Namen aller Benutzertabellen abrufen.

    select name 
    from sqlite_master 
    where type='table' and name not like 'sqlite_%'; 
    
  3. Erstellen Sie die On-Disk-Datenbank in einigen neuen SQLiteConnection.

  4. Führen Sie alle zuvor erhaltenen SQL-Anweisungen aus, um die Datenbankstruktur in der Datenbank auf der Festplatte zu erstellen.

  5. Schließen Sie die separate Verbindung zur Datenbank auf der Festplatte.

  6. Hängen Sie die On-Disk-Datenbank an die In-Memory-Datenbank an.

    attach 'ondisk.db3' as 'ondisk'; 
    
  7. Für jede früher erhaltenen Benutzertabelle, kopieren Sie den Inhalt aus dem in-Speicher auf die On-Disk-Datenbank.

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