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