批量插入SQLite.Net数据库

问题描述 投票:0回答:7

我需要在 Visual Studio 中对 SQLite 数据库执行批量插入。有人知道该怎么做吗?

.net visual-studio sqlite
7个回答
7
投票

使用 SQLite,您可以通过打开事务、循环所有数据并执行相关 SQL INSERT 命令,然后提交事务来完成此操作。这是在 SQLite 中执行批量插入的最快方法。


4
投票

我正在使用 SQLite.Net.Async-PCL nuget 包在我的 UWP 应用程序中使用 sqlite,我发现 InsertAllAsync 方法非常快。它能够在不到一秒的时间内将近 33,000 行插入到表中,而当我使用循环并调用 InsertAsync 时,几乎需要 10 分钟。

我检查了源代码,它正在使用 InsertAll 方法的事务,所以很高兴这一切都已处理完毕,您只需传入项目列表即可,而不必跳过任何麻烦。


1
投票

您可以编写常规插入语句并循环遍历数据集,将相关数据插入到查询字符串中,然后再针对数据库运行它。


1
投票

我编写了一个类来帮助促进 SQLite 中的批量插入。希望对您有帮助:

http://procbits.com/2009/09/08/sqlite-bulk-insert/

-JP


1
投票
    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();

    }

0
投票

我需要做同样的事情,我在 Sqlite.Net 论坛上找到了这个答案,可能有人感兴趣。

http://sqlite.phxsoftware.com/forums/t/134.aspx


0
投票

我在使用 InsertOrReplaceAsync 的 for 循环中出现了严重的速度减慢。我将代码移至事务内。这是有道理的,因为否则每个数据库写入都会产生大量性能开销。这对于 30,000 条记录效果很好。

await database.RunInTransactionAsync(async (transaction) =>
{
    foreach(var dataModel in dataModelList)
    {
        await database.InsertOrReplaceAsync(dataModel);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.