21

現在、C#プロジェクトのデータベースエンジンとして使用することを考えてSQLiteいますが、次の問題が発生しました。メモリストレージ用のAPIが見つかりません。私が達成したいのは次のとおりです。

プログラムの開始時に、dbファイル(HDDから)をメモリにロードしたいと思います。プログラムの実行中に、このメモリストリームを実際のデータベース(読み取り、書き込み、挿入、選択など)として使用したいと思います。閉じたら、ストリームをファイルに保存します。

誰かが私を正しい方法で指摘したり、この目的により適した別のデータベースエンジンを提案したりできますか?

4

1 に答える 1

41

dbファイルをメモリに、メモリをファイルにコピーする機能を備えたSQLite OnlineBackupAPIを使用できます。SQLite Online Backup APIのネイティブサポートは、バージョン1.0.80.0(SQLite 3.7.11を使用)のSystem.Data.SQLiteにあります。

これは、APIを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();               
}
于 2012-07-08T17:47:23.040 に答える