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则需要更多的时间来打开,而应用中通常并不需要。