2012-07-08 26 views
13

Tôi hiện đang nghĩ đến việc sử dụng SQLite làm công cụ db cho dự án C# của mình, nhưng tôi đã gặp sự cố sau: tôi không thể tìm thấy bất kỳ API nào để lưu trữ bộ nhớ. Những gì tôi muốn đạt được là:Memory Stream là DB

Khi bắt đầu chương trình, tôi muốn tải tệp db (từ HDD) vào bộ nhớ. Trong khi thực hiện chương trình, tôi muốn sử dụng luồng bộ nhớ này như một db thực (đọc, ghi, chèn, chọn, v.v.). Khi đóng lưu luồng vào tệp.

Bất cứ ai có thể chỉ cho tôi đúng cách hoặc đề xuất một công cụ db khác phù hợp hơn cho mục đích này.

Trả lời

31

Bạn có thể sử dụng SQLite Online Backup API có khả năng sao chép tệp db vào bộ nhớ, bộ nhớ cần lưu. Hỗ trợ gốc cho SQLite Online Backup API có mặt trong System.Data.SQLite từ phiên bản 1.0.80.0 (với SQLite 3.7.11).

Đây là ví dụ đơn giản như thế nào API có thể được sử dụng trong 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

Cảm ơn bạn, cho giải pháp tốt đẹp và sạch sẽ này. – Anonymous

+8

Có cách nào để thực hiện điều tương tự để lấy byte [] mà không cần chạm vào đĩa không? – Gleno

+3

Cảnh báo: Sử dụng API dự phòng cho cơ sở dữ liệu trong bộ nhớ * xóa [Độ bền] (http://en.wikipedia.org/wiki/Durability_ (database_systems)) đảm bảo *. – user2864740