标签:ziparchive sqlite zip c database
我试图在内存中创建一个SQLite数据库,然后将其直接添加到我创建的zip文件中.到目前为止,我可以使用ZipArchive和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方法.这仍然需要在磁盘上创建一个临时数据库文件(备份).您可以这样进行操作(假设您的内存连接名为源):
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.
标签:ziparchive,sqlite,zip,c,database 来源: https://codeday.me/bug/20191120/2043826.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。