【问题标题】:Memory Stream as DB内存流作为数据库
【发布时间】:2012-07-08 14:11:56
【问题描述】:

我目前正在考虑使用SQLite 作为我的 C# 项目的数据库引擎,但我遇到了以下问题:我找不到任何用于内存存储的 API。我想要实现的目标如下:

程序启动时,我想将 db 文件(从 HDD)加载到内存中。 在程序执行期间,我想将此内存流用作真正的数据库(读取、写入、插入、选择等)。 关闭后将流保存到文件中。

谁能指出我正确的方式或建议另一个更适合此目的的数据库引擎。

【问题讨论】:

    标签: c# sqlite memory


    【解决方案1】:

    您可以使用SQLite Online Backup API,它可以将数据库文件复制到内存,将内存复制到文件。 从版本 1.0.80.0(带有 SQLite 3.7.11)开始,System.Data.SQLite 中提供了对 SQLite Online Backup API 的本机支持。

    这是如何在 C# 中使用 API 的简单示例:

    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();               
    }
    

    【讨论】:

    • 感谢您提供这个干净整洁的解决方案。
    • 有没有办法在不接触磁盘的情况下做同样的事情来获取字节[]?
    • 警告:将 Backup API 用于内存数据库删除 Durability 保证
    • @Gleno:您获取 byte[] 并保存到临时文件 (temp.db),然后使用备份 API 将其复制到内存数据库中。然后进行更改。然后使用备份 api 再次存储到 temp.db。然后将 temp.db 读回 byte[].
    • 这个 API 是用 C 语言编写的。我如何在单声道中使用这个 API?请建议
    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多