我需要在 Visual Studio 中对 SQLite 数据库执行批量插入。有人知道该怎么做吗?
使用 SQLite,您可以通过打开事务、循环所有数据并执行相关 SQL INSERT 命令,然后提交事务来完成此操作。这是在 SQLite 中执行批量插入的最快方法。
我正在使用 SQLite.Net.Async-PCL nuget 包在我的 UWP 应用程序中使用 sqlite,我发现 InsertAllAsync 方法非常快。它能够在不到一秒的时间内将近 33,000 行插入到表中,而当我使用循环并调用 InsertAsync 时,几乎需要 10 分钟。
我检查了源代码,它正在使用 InsertAll 方法的事务,所以很高兴这一切都已处理完毕,您只需传入项目列表即可,而不必跳过任何麻烦。
您可以编写常规插入语句并循环遍历数据集,将相关数据插入到查询字符串中,然后再针对数据库运行它。
private void prepareConnectionForBulkInsert(SQLiteConnection cn)
{
SQLiteCommand stmt;
stmt = new SQLiteCommand("PRAGMA synchronous=OFF", cn);
stmt.ExecuteNonQuery();
stmt = new SQLiteCommand("PRAGMA count_changes=OFF", cn);
stmt.ExecuteNonQuery();
stmt = new SQLiteCommand("PRAGMA journal_mode=MEMORY", cn);
stmt.ExecuteNonQuery();
stmt = new SQLiteCommand("PRAGMA temp_store=MEMORY", cn);
stmt.ExecuteNonQuery();
}
我需要做同样的事情,我在 Sqlite.Net 论坛上找到了这个答案,可能有人感兴趣。
我在使用 InsertOrReplaceAsync 的 for 循环中出现了严重的速度减慢。我将代码移至事务内。这是有道理的,因为否则每个数据库写入都会产生大量性能开销。这对于 30,000 条记录效果很好。
await database.RunInTransactionAsync(async (transaction) =>
{
foreach(var dataModel in dataModelList)
{
await database.InsertOrReplaceAsync(dataModel);
}
});