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

What does ExecuteNonQuery() do during a bulk insert?

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

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

在批量插入查询中,command.ExecuteNonQuery() returns 受插入、更新或删除语句影响的行数。

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

在正常情况下rollback journal mode, changes are simply written to the database. However, to allow atomic commits,所有更改过的数据库页面之前的内容都会写入回滚日志,这样回滚就可以恢复到之前的状态。 (当您执行如此多的插入操作以至于需要分配新页面时,这些页面就没有旧状态了。)

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

无论哪种情况,在数据量溢出 page cache(默认大小约为 2 MB)之前,实际上什么都不会写入。

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