2012-07-08 15 views
13

Attualmente sto pensando di utilizzare SQLite come motore db per il mio progetto C#, ma ho riscontrato il seguente problema: non riesco a trovare alcuna API per l'archiviazione di memoria. Quello che voglio ottenere è il seguente:Memory Stream come DB

All'avvio del programma voglio caricare il file db (da HDD) in memoria. Durante l'esecuzione del programma voglio usare questo flusso di memoria come un vero db (leggi, scrivi, inserisci, seleziona ecc.). Al termine, salva il flusso sul file.

Qualcuno può indicarmi il modo giusto o suggerire un altro motore db che sarebbe più adatto per questo scopo.

risposta

31

È possibile utilizzare SQLite Online Backup API che ha la capacità di copiare il file db in memoria, la memoria nel file. Il supporto nativo per SQLite Online Backup API è presente in System.Data.SQLite dalla versione 1.0.80.0 (con SQLite 3.7.11).

Questo è semplice esempio di come API può essere utilizzata in 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

Grazie, per questa soluzione bella e pulita. – Anonymous

+8

C'è un modo per fare la stessa cosa per ottenere il byte [] senza toccare il disco? – Gleno

+3

Avviso: l'utilizzo dell'API di backup per un database in memoria * rimuove le [durate] (http://en.wikipedia.org/wiki/Durability_ (database_systems)) garanzie *. – user2864740