我有一些我编写的批量插入vb.net代码(工作)。它为每个插入调用ExecuteNonQuery(),然后在最后执行commit()。
我的问题是在等待commit()命令时放置这些插入的位置?我还没有做任何改变来支持批处理。因此,在调用commit()之前,将使用现有代码插入一百万行。我明显地问这个问题,知道我是否会遇到内存问题,因此迫使我现在改变我的代码。
答案 0 :(得分:3)
在正常rollback journal mode中,只需将更改写入数据库。但是,要允许atomic commits,所有已更改的数据库页的先前内容都将写入回滚日志,以便回滚可以恢复以前的状态。 (当您执行这么多插入时需要分配新页面时,这些页面没有旧状态。)
在WAL mode中,所有更改都将写入预写日志。
在任何一种情况下,在数据量溢出page cache(默认大小约为2 MB)之前,实际上不会写入任何内容。
因此,事务的大小不受内存的限制,只受磁盘空间的限制。
答案 1 :(得分:-3)
在批量插入查询中,command.ExecuteNonQuery()不返回由insert,update或delete语句影响的行。
在每次成功插入后的情况下,它将返回1作为整数。 如果您没有使用事务查询,则提交没有任何意义。如果您未明确使用交易,则会自动提交更改。