ADO在查询视图时自动添加rowid,导致Ora 1445错误

来源:互联网 发布:手机控制电脑桌面软件 编辑:程序博客网 时间:2024/06/09 19:08

 我的查询是类似

"select * from mv_view"

mv_view是一个多表联合视图.一直也没遇到啥问题,但是昨天用sql monitor抓错误的时候,发现查询被改成了

"select *,mv_view.rowid from mv_view"

并且触发了Oracle 1445错误,然后自动去掉rowid重新查询,成功!

 

后来找到了原因:

MSADO的  _RecordsetPtr的成员函数Open定义如下:

其中参数LockType是一个枚举,指定数据库锁定方式

之前使用的参数全部都是乐观锁adLockOptimistic,尝试换成adLockReadOnly后发现不会再自动添加rowid了.

 

原因是在ADO认为记录可能被Update时就会自动添加rowid,使用了adLockReadOnly参数相当于告知ADO记录不会被Update,ADO就不会自动添加rowid.

 

如果要Update 怎么办呢?那当然不能用只读锁,那就只能修改数据库视图,为视图加入唯一索引了.

PS:根据资料显示adLockReadOnly能够明显提高查询速度

 

 

 

原创粉丝点击