2012-07-08 10 views
13

Obecnie myślę o użyciu SQLite jako silnika db dla mojego projektu C#, ale wystąpił następujący problem: nie mogę znaleźć żadnego API do przechowywania pamięci. Co chcę osiągnąć, to:Strumień pamięci jako DB

Po uruchomieniu programu chcę załadować plik db (z HDD) do pamięci. Podczas wykonywania programu chcę użyć tego strumienia pamięci jako prawdziwego db (odczyt, zapis, wstaw, wybierz itp.). Po zamknięciu zapisz strumień do pliku.

Czy ktoś może wskazać mi we właściwy sposób lub zaproponować inny silnik bazowy, który byłby lepiej przystosowany do tego celu.

Odpowiedz

31

Można użyć SQLite Online Backup API, który ma zdolność do kopiowania pliku db do pamięci, z pamięci do pliku. Natywna obsługa dla SQLite Online Backup API jest obecna w System.Data.SQLite od wersji 1.0.80.0 (z SQLite 3.7.11).

To jest prosty przykład, jak można wykorzystać API w języku C#:

SQLiteConnection source = new SQLiteConnection("Data Source=c:\\test.db"); 
source.Open(); 

using (SQLiteConnection destination = new SQLiteConnection(
    "Data Source=:memory:")) 
{ 
    destination.Open();    

    // copy db file to memory 
    source.BackupDatabase(destination, "main", "main",-1, null, 0); 
    source.Close(); 

    // insert, select ,...   
    using (SQLiteCommand command = new SQLiteCommand()) 
    { 
    command.CommandText = 
     "INSERT INTO t1 (x) VALUES('some new value');"; 

    command.Connection = destination; 
    command.ExecuteNonQuery(); 
    }    

    source = new SQLiteConnection("Data Source=c:\\test.db"); 
    source.Open(); 

    // save memory db to file 
    destination.BackupDatabase(source, "main", "main",-1, null, 0); 
    source.Close();    
} 
+1

Dziękuję, za to ładne i czyste rozwiązanie. – Anonymous

+8

Czy istnieje sposób na to samo, aby uzyskać bajt [] bez dotykania dysku? – Gleno

+3

Ostrzeżenie: użycie Backup API dla bazy danych w pamięci * usuwa [Trwałość] (http://en.wikipedia.org/wiki/Durability_ (database_systems)) gwarantuje *. – user2864740

Powiązane problemy