rs.open   sql,conn,a,b

a:  

adopenforwardonly(=0)  
只读,且当前数据记录只能向下移动

adopenkeyset(=1)  
只读,当前数据记录可自由移动

adopendynamic(=2)  
可读写,当前数据记录可自由移动

adopenstatic(=3)  
可读写,当前数据记录可自由移动,可看到新增记录

b:

adlockreadonly(=1)  
缺省锁定类型,记录集是只读的,不能修改记录

adlockpessimistic(=2)  
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

adlockoptimistic(=3)  
乐观锁定   ,直到用update方法提交更新记录时才锁定记录。

adlockbatchoptimistic(=4)  
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。


-----------------------------------------------------
记录集是否可写不是由光标类型决定的,而是由锁类型决定的。第一种光标(adOpenForwardOpnly)只能向前移动,第二种光标(adOpenStatic)可自由移动,确实如此。但它们只决定了记录集是静态的,而不是“只读”的。而后面两种也不是“可读写”的,而是“动态”的。

记录集分动态、静态两种,区别在于,记录集在打开的过程中,是否实时反映用户对数据库的更改(可能是当前访问数据集的用户,也可能是其他用户)。

adOpenForwardOnly和adOpenStatic这两种属静态类型,当前用户打开记录集后,记录集就保持不变一直到关闭后再次打开它。在这过程中如果数据库中的相应记录发生改变,在当前用户是看不到的。

adOpenDynamic和adOpenKeyset这两种则属动态类型,记录集会反映出数据库中相应记录的更改,他们两者的区别在于:adOpenDynamic是完全动态的,数据库记录的更新、删除、添加都会体现在当前用户所打开的记录集中;而adOpenKeyset则保持当前记录集的个数不变,它只体现更新操作,不体现删除和添加操作。

另外,建议大家使用相应的ADO常量,而不是用一些让人摸不着头脑的数字。在页面的开头部分加入: <!--   metadata   type= "typelib "   file= "C:\Program   Files\Common   Files\System\ado\msado15.dll "   -->
指令,就可以使用所有的   ADO   2.5   常量了。ADO常量非常有用,建议大家去记这些常量,而不是记数字。常量由英文单词组成,可以提高代码的可读性,更重要的是帮助我们理解常量所充当的作用。

很多程序员只知道用诸如rs.Open   sql,   cn,   1,   1这样的语句,用了很多年也不知道这两个数字的含义。虽然这两个数字在大多数情况下可以正常工作,却是以牺牲效率为代价的。通常用于单纯显示的记录集,只需要用只向前、只读类型即可,而这两个属性是默认的,所以可以不设置,如:objRS.Open   strSQL,   objConn,   adOpenForwardOnly,   adLockReadOnly
等同于
objRS.Open   strSQL,   objConn

打开这种记录集的执行效率是最高的!例外的是需要对记录集进行分页,这时必须替换adOpenForwardOnly为其它的,比如adOpenStatic就不错。而通常大家使用的rs.Open   sql,   cn,   1,   1则需要更多的时间来打开,而应用中通常并不需要。

posted on 2010-08-24 20:35  houbusheng123  阅读(537)  评论(0编辑  收藏  举报