2012-07-08 13 views
13

Actualmente estoy pensando en utilizar SQLite como motor db para mi proyecto C#, pero me encontré con el siguiente problema: no puedo encontrar ninguna API para el almacenamiento de memoria. Lo que quiero lograr es lo siguiente:Memory Stream como DB

Al inicio del programa quiero cargar el archivo db (desde HDD) en la memoria. Durante la ejecución del programa, quiero utilizar esta secuencia de memoria como una base de datos real (leer, escribir, insertar, seleccionar, etc.). Al momento de cerrar, guarde la secuencia en el archivo.

¿Alguien puede indicarme el camino correcto o sugerir otro motor de base de datos que sería más adecuado para este fin.

Respuesta

31

Puede usar SQLite Online Backup API que tenga la capacidad de copiar el archivo db a la memoria, la memoria al archivo. La compatibilidad nativa para SQLite Online Backup API está presente en System.Data.SQLite a partir de la versión 1.0.80.0 (con SQLite 3.7.11).

Ésta es sencillo ejemplo de cómo la API se puede utilizar en 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

Gracias, por esta solución agradable y limpio. – Anonymous

+8

¿Hay alguna manera de hacer lo mismo para obtener el byte [] sin tocar el disco? – Gleno

+3

Advertencia: el uso de la API de respaldo para una base de datos en memoria * elimina [Durabilidad] (http://en.wikipedia.org/wiki/Durability_ (database_systems)) garantiza *. – user2864740