将 SQLite 数据库直接添加到 Zip 文件
Add SQLite database directly to Zip file
我正在尝试在内存中创建一个 SQLite 数据库,然后将其直接添加到我创建的 zip 文件中。到目前为止,我可以使用 ZipArchive and ZipFile 类 创建 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 容器,然后删除数据库,但是当您看到数据库时看起来很糟糕正在创建然后删除。
一定有更好的办法吧?
谢谢,
据我所知,您只能将内存数据库保存到磁盘(并将其加载回内存)using the SQLite Backup 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.
我正在尝试在内存中创建一个 SQLite 数据库,然后将其直接添加到我创建的 zip 文件中。到目前为止,我可以使用 ZipArchive and ZipFile 类 创建 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 容器,然后删除数据库,但是当您看到数据库时看起来很糟糕正在创建然后删除。
一定有更好的办法吧?
谢谢,
据我所知,您只能将内存数据库保存到磁盘(并将其加载回内存)using the SQLite Backup 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.