我通过 OleDB 在表中插入几行,并立即选择插入的行。
我无法以这种方式检索行,我必须等待大约。3-5 秒。然后插入的行出现在表格中。
我在数据库本身中观察到了这种行为,我通过 OleDB 插入了行并在 Access 中观察了打开的表。该行在 3-5 秒后出现在表格中。
Access 是否缓冲行?我是否必须通过 OleDB 发送刷新或提交等?
任何建议都会非常有帮助。
(请不要问我为什么不通过我的业务逻辑或者其他方式来解决这个问题......)
我通过 OleDB 在表中插入几行,并立即选择插入的行。
我无法以这种方式检索行,我必须等待大约。3-5 秒。然后插入的行出现在表格中。
我在数据库本身中观察到了这种行为,我通过 OleDB 插入了行并在 Access 中观察了打开的表。该行在 3-5 秒后出现在表格中。
Access 是否缓冲行?我是否必须通过 OleDB 发送刷新或提交等?
任何建议都会非常有帮助。
(请不要问我为什么不通过我的业务逻辑或者其他方式来解决这个问题......)
我做了一些测试,ACE OleDb 似乎确实有一些缓冲。我找到
如果我做了一些 INSERT,然后立即在同一个 OleDbConnection 上做了一个 SELECT,那么新行就可以立即使用。
如果我打开两个 OleDbConnection 对象,INSERTed on con1
,然后立即在con2
新行上 SELECTed 大约需要 5 秒才能在con2
连接上可用。
如果我打开两个 OleDbConnection 对象,INSERTed on con1
, did con1.Close()
,然后立即 SELECTed 上con2
的新行立即可用。
因此,关闭 OleDbConnection 似乎具有“刷新”写入并使其更快地可用于其他连接的效果。我的猜测是 OleDb 正在隐式缓冲(或“批处理”)更新,因为 ACE/Jet 是一个共享文件数据库,并且它试图减少对数据库文件的争用。
(当我使用 SQL Server 进行相同的测试时,我关闭时的情况和打开时的情况之间没有显着差异con1
。在每种情况下,新记录都是立即可用的。)