在批量插入期间ExecuteNonQuery()做了什么?

时间:2016-10-17 05:04:26

标签: vb.net sqlite bulkinsert executenonquery

我有一些我编写的批量插入vb.net代码(工作)。它为每个插入调用ExecuteNonQuery(),然后在最后执行commit()。

我的问题是在等待commit()命令时放置这些插入的位置?我还没有做任何改变来支持批处理。因此,在调用commit()之前,将使用现有代码插入一百万行。我明显地问这个问题,知道我是否会遇到内存问题,因此迫使我现在改变我的代码。

2 个答案:

答案 0 :(得分:3)

在正常rollback journal mode中,只需将更改写入数据库。但是,要允许atomic commits,所有已更改的数据库页的先前内容都将写入回滚日志,以便回滚可以恢复以前的状态。 (当您执行这么多插入时需要分配新页面时,这些页面没有旧状态。)

WAL mode中,所有更改都将写入预写日志。

在任何一种情况下,在数据量溢出page cache(默认大小约为2 MB)之前,实际上不会写入任何内容。

因此,事务的大小不受内存的限制,只受磁盘空间的限制。

答案 1 :(得分:-3)

在批量插入查询中,command.ExecuteNonQuery()不返回由insert,update或delete语句影响的行。

在每次成功插入后的情况下,它将返回1作为整数。 如果您没有使用事务查询,则提交没有任何意义。如果您未明确使用交易,则会自动提交更改。