c# - 如何批量插入SQLITE数据库?

标签 c# sqlite win-universal-app

我正在开发 UWP 应用程序。

我有一个数据库,应该用大约 20,000 条记录进行初始化。定义如下的记录:

private static readonly ObservableCollection<TickRecord> TickRecords = new ObservableCollection<TickRecord>();

我尝试像这样一次插入一条记录:

private void CreateFakeTickRecords()
{
if ( Database.Database.CountTickRecords() > 0 )
    {
    return;
    }

foreach ( var tickRecord in TickRecords )
    {
    Database.Database.AddOrUpdateTickRecord( tickRecord );
    }
}

public static void AddOrUpdateTickRecord( TickRecord tickRecord )
{
    // Create a new connection
    using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
    {
    if ( tickRecord.Id == 0 )
        {
        // New
        db.Insert( tickRecord );
        }
    else
        {
        // Update
        db.Update( tickRecord );
        }
    }
}

此代码工作正常,但速度太慢。

我想修改它以便我可以进行“批量插入”。

我该怎么做?

谢谢

最佳答案

试试 InsertAll 和 UpdateAll 函数。希望这只打开一次数据库表并立即插入/更新所有内容。您需要提前确定要插入/更新哪些对象,但这仍然可以加快速度。

List<TickRecords> updates = new List<TickRecords>(); 

List<TickRecords> inserts = new List<TickRecords>();  

foreach ( var tickRecord in tickRecords ) 
{   
    if ( tickRecord.Id == 0 )
    {       
        updates.Add(tickRecord);
    }
    else
    {       
        inserts.Add(tickRecords);
     } 
}



using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) ) 
{
     db.InsertAll(inserts);
     db.UpdateAll(updates);
}

关于c# - 如何批量插入SQLITE数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36778304/

相关文章:

c# - 组合框 SelectedIndex MVVM WPF

sql - 如果有不同的方法可以完成相同的任务,我该如何选择最佳的 SQL 查询?

xaml - ListView xaml uwp 中缺少垂直滚动

c# - Fluent NHibernate 加入约束

c# - Entity Framework 不会保存关系

c# - SignalR:检测 C# 客户端中的事件连接

ios - 从崩溃的iOS应用中获取数据库

android - 如何在 Android 上测试内容提供者

c# - 从 FileActivated 文件访问文件夹中的所有文件

c# - 如何在 Windows 10 Universal 中获取设备的唯一标识符?