将SQLite数据库直接添加到Zip文件中

4
我正在尝试在内存中创建一个SQLite数据库,然后直接将其添加到我创建的zip文件中。到目前为止,我可以使用ZipArchiveZipFile类创建zip文件。但是,我找不到一种方法将我在内存中创建的SQLite数据库添加到zip容器中。
以下是我用来在内存中创建数据库的代码:
private static void MemoryDB()
        {
            SQLiteConnection conn = new SQLiteConnection("Data Source = :memory:");
            conn.Open();

            String sql = "CREATE TABLE highscores (name VARCHAR(25), score INT)";
            SQLiteCommand command = new SQLiteCommand(sql, conn);
            command.ExecuteNonQuery();

            // Insert Data
            sql = "INSERT INTO highscores (name, score) VALUES ('Jennie', 98)";
            command = new SQLiteCommand(sql, conn);
            command.ExecuteNonQuery();

            sql = "INSERT INTO highscores (name, score) VALUES ('Michael', 42)";
            command = new SQLiteCommand(sql, conn);
            command.ExecuteNonQuery();

            sql = "INSERT INTO highscores (name, score) VALUES ('Jason', 76)";
            command = new SQLiteCommand(sql, conn);
            command.ExecuteNonQuery();

            // Select Data
            sql = "SELECT * FROM highscores ORDER BY score desc";
            command = new SQLiteCommand(sql, conn);
            SQLiteDataReader reader = command.ExecuteReader();
            while (reader.Read())
                Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);

            conn.Close();
        }

我已经能够在磁盘上创建普通数据库,并使用ZipArchive.CreateEntryFromFile()方法将其添加到zip容器中,然后删除数据库,但当您可以看到正在创建和删除数据库时,这看起来非常糟糕。

一定有更好的方法吧?

谢谢!

1个回答

4
据我所知,您只能使用SQLite备份API将内存数据库保存到磁盘(并将其加载回内存) 在C#中, SQLiteConnection 具有可用于执行此操作的 BackupDatabase 方法。这仍需要在磁盘上创建临时数据库文件(备份)。您可以像这样执行此操作(假设您的内存连接名为 source ):
var myBackupPath = @"c:\backups\backup.db";
using (var destination = new SQLiteConnection("Data Source=" + myBackupPath))
{
    // saves from in-memory to the on-disk backup.
    source.BackupDatabase(destination, "main", "main", -1, null, -1);
}

// Now you can zip the backup & delete it.

这与我的想法非常相似,即将数据库保存到磁盘上,压缩它,然后删除它。不过很高兴知道有BackupDatabase方法,更加简洁!谢谢 :) - Michael Murphy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接