C# 如何批量查询SQLite数据库
我正在将C#与.NET4.5一起使用。我正在制作一个收集特定数据的刮板。每次刮取一个值时,我都需要确保它没有被添加到SQLite数据库中 为此,每次刮取一个值时,我都会进行一次调用,以查询db,检查它是否包含该值,如果不包含,我会进行另一次调用,将该值插入db 由于我每秒要刮取多个值,这将非常占用IO,需要不断调用dbC# 如何批量查询SQLite数据库,c#,sql,.net,sqlite,C#,Sql,.net,Sqlite,我正在将C#与.NET4.5一起使用。我正在制作一个收集特定数据的刮板。每次刮取一个值时,我都需要确保它没有被添加到SQLite数据库中 为此,每次刮取一个值时,我都会进行一次调用,以查询db,检查它是否包含该值,如果不包含,我会进行另一次调用,将该值插入db 由于我每秒要刮取多个值,这将非常占用IO,需要不断调用db 我的问题是,有没有更好的办法?也许我可以将刮取的值排队,然后立即运行批处理查询?这可能吗?我认为有三种方法: 使用插入或忽略,如果条目已经存在(基于主键和唯一字段),则会拒绝该条
我的问题是,有没有更好的办法?也许我可以将刮取的值排队,然后立即运行批处理查询?这可能吗?我认为有三种方法:
插入或忽略
,如果条目已经存在(基于主键和唯一字段),则会拒绝该条目。或者干脆INSERT
(或其等价物(INSERT或ABORT
),它将返回SQLITE\u CONSTRAINT
,如果要计算失败的插入次数,您必须捕获并管理该值BEGIN;
),执行插入(您也可以在此处使用INSERT或IGNORE
),提交事务(commit;
)#1听起来很有趣…这会将我当前的调用减半。我假设如果插入失败,这会引发异常,对吗?对于#2,我能知道每次尝试插入的结果吗?说明在忽略时,不会返回错误。因此,不会有任何异常或警告说某个项被忽略。至于#2,如果使用
INSERT或IGNORE
,则在相同的情况下,成功时不会发出警告。但是,默认设置为INSERT
(相当于INSERT或ABORT
)冲突时,它将返回SQLITE\u约束
。您需要捕获该返回值并实现您自己的错误/日志系统。但是,如果您使用INSERT
而没有冲突解决算法(即插入或中止
)在事务内部,插入失败将停止该事务,并将回滚自事务开始以来的所有先前更改。我认为您不希望这样。嗯,那么很遗憾,我回到了原点。如果有一种方法可以判断插入或忽略是否未成功,那么这将是完美的解决方案。不要插入或忽略,只需插入即可。您将得到警告。您可以找到文档。