2012-07-08 20 views
13

Şu anda C# projem için SQLite db motoru kullanmayı düşünüyorum, ancak şu soruna rastladım: Bellek depolama için herhangi bir API bulamıyorum. Elde etmek istediğim şudur:Bellek Akışı DB

Programın başlamasından sonra db dosyasını (HDD'den) belleğe yüklemek istiyorum. Programın yürütülmesi sırasında bu bellek akışını gerçek bir db olarak kullanmak istiyorum (oku, yaz, ekle, ekle vs.). Kapatma işleminden sonra akışı dosyaya kaydedin.

Bana doğru şekilde işaret eden veya bu amaç için daha uygun olan başka bir db motoru önerebilir.

cevap

31

Db dosyasını bellek, dosyadan diğerine kopyalayabilen SQLite Online Backup API'u kullanabilirsiniz. SQLite Online Backup API için yerel destek, System.Data.SQLite sürüm 1.0.80.0'dan (SQLite 3.7.11 ile) bulunur.

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

bu güzel ve temiz bir çözüm için, teşekkür ederim:

Bu API C# nasıl kullanılabileceğini basit bir örnektir. – Anonymous

+8

Byte [] diskine dokunmadan elde etmek için aynı şeyi yapmanın bir yolu var mı? – Gleno

+3

Uyarı: Bellek içi veritabanı için Yedekleme API'sini kullanma * [Durability] (http://en.wikipedia.org/wiki/Durability_ (database_systems)) garantilerini kaldırır *. – user2864740