Rs.Open参数说明 在ASP中经常用Rs.Open sql,conn,1,1这样的方式打开数据库,但仍有一部分同行 不知道这是嘛意思,现整理如下: Rs.Open语法如下:rs.Open Source,ActiveConnection,CursorType,LockType Source为sql语句,ActiveConnection为数据库连接,CursorType是游标,LockType 是数据锁定类型. CursorType 常量 说明 编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。 定,只在调用 Update 方法时才锁定记录。 即更新模式相对)。 CursorType BookMark 他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark 增加或删除记录都将反映到记录集中。支持全功能浏览。 或删除记录都不会反映到记录集中。支持向前或向后移动 可对当前记录进行更改、插入和删除等 ADO如何锁定RecordSet的记录呢? 前面介绍使用Recordset(记录集合)对象的方法如下: Set rs = Server.CreateObject("ADODB.Recordset") rs.Open SQL指令, Conn, 1, 1 ‘读取 rs.Open SQL指令, Conn, 1, 3 ‘新增、修改、或删除 到底rs.Open后接的第三个参数1和第四个参数是什么意思呢?为何第四个参 数在读取时要用1,新增、修改、或删除时要用3呢? RecordSet的锁定 当开启Recordset对象时,您也可以用LockType属性指定锁定的型态: 1:唯读(ReadOnly),不允许更新,为预设值。 一开始执行就立即锁定此记录或包含资料记录的资料页,并维持锁定直到使用 Update方法将变更写回到资料库为止。 定此记录。 的记录批次写回到资料库时,才锁定此批记录。 当您使用悲观锁定(Pessimistic Lock)时,一旦编辑Recordset资料或呼叫了 AddNew方法时,就会锁定包含目前编辑RecordSet的资料对应页,直到明确地确认 (Commit)或取消这个RecordSet的变更后,它才会释放这个锁定。 悲观锁定的主要优点,是取得锁定之后,只要RecordSet还被锁定着,就不会发生 任何锁定冲突。由于一个使用者开始编辑RecordSet后,其他使用者就无法改变它 ,所以悲观锁定是保证应用程式能读取到目前最新资料的唯一方法。 悲观锁定的缺点,是在编辑和锁定该RecordSet当中,包含该RecordSet的整个资 料对应页都会被锁定。如果当使用者开始编辑和锁定 RecordSet后,在RecordSet 被锁定期间过了很久才明确地确认(Commit)或取消这个RecordSet的变更,就将 产生一个问题,这不仅锁定了使用者正在编辑的RecordSet,而且还可能会锁定存 在该被锁定资料对应页内其它的RecordSet。 当您使用乐观锁定(Optimistic Lock)时,只会在使用Update方法变更 的主要优点。 乐观锁定的缺点,是当使用者开始编辑RecordSet时,无法确定更新是否会成功。 如果另一个使用者改变了第一个使用者正在编辑的RecordSet,那么建立在乐观锁 定的更新将会失败。 譬如甲和乙都在编辑相同的RecordSet,若甲开始以乐观锁定编辑一个 禁止乙尝试编辑相同的RecordSet。 于是乙开始编辑相同的RecordSet。但是,乙也不知道甲正在编辑该RecordSet, 也看不到最新的资料。 因为乙也正在编辑该资料录,所以当甲尝试储存他的变更时,就会收到一个错误 。 在你做交易确认(Commit)之前,异动一直会做写入锁定(Write-Lock)的功能 ,所以转换成悲观锁定。 乐观更新(optimistic update)是逐笔记录进行的。您可以让使用者能在自己的 电脑中,暂存(cache)多笔记录的变更,然后使用批次处理,一次把这些多笔变 更的记录传给伺服器进行更新,这样效率比较高。这个方式称为批次乐观更新 (Batch Optimistic Update)。 批次乐观更新使用的锁定方式为批次乐观锁定(Batch Optimistic lock),使用 UpdateBatch方法将多笔变更的记录批次写回到资料库时,才锁定此批资料记录。 在Recordset对象上设定锁定时,如果锁定失败,则会产生错误。 譬如有另一个使用者以锁定的模式,开启了Recordset对象时,那么当您尝试锁定 该Recordset对象时,就会发生错误。 错误可能为: 3260:RecordSet被锁定。在您遇到这个错误时,可以先等待一下,然後再重试一 次。 3262:无法锁定资料表 <name>,目前正被使用者<name>在机器<name>上使 用。先等待一下,然后再重试一次。 3197:RecordSet的资料在被开启之后发生了改变。因为您和另一个使用者尝试同 时改变同一笔资料,可以再试一下重新读取该RecordSet,以取得最新的资料。 3186:无法储存,目前正被机器 <name> 上的 <name> 使用者锁定。当一个使用 者尝试更新一资料对应页,而且该页被另一个使用者锁定时,就会发生这个错误 。要处理这个错误,则先等待一会儿,然后重新储存该RecordSet。 3260:无法更新,目前,被机器 <name> 上的使用者 <name> 锁定。当您编辑 会发生这个错误要处理这个错误,先等待一会儿,然后再一次储存该RecordSet。 或者您可以通知遇到这个问题的使用者,并允许使用者选择是否要再重试这个操 作。
cursor(资料指标)是一个指标或指标的集合,它指向根据某条件从资料库 中取回的资料。cursor的特性如下:
前移动。 cursor所在位置 cursor需要暂存的资源来储存资料,这些资源为RAM、虚拟记忆体、暂存档或 资料库。如果这些资源在用户端的电脑中,cursor就称为client-side(客户端) 要的资料传到用户端,由用户端电脑来管理暂存的资源。 另外一种类型的cursor,称为server-side(服务器端)cursor。对於这种类型的 cursor,使用服务器上的暂存资源来管理RecordSet对象。对於server-side cursor,只有由cursor选中的RecordSet才透过网路传送给用户端的电脑。因此在 网路通讯或频宽出现问题时,使用这种类型的cursor 在性能上有很大的提升。但 是,因为需要服务器上的RAM和磁碟空间等资源,因此必须保证服务器有足够资源 来管理所有客户端电脑请求的cursor。 CursorLocation属性,可以选择cursor的所在位置,是在用户端电脑还是服务器 上:
性能迅速下降。 性能。 cursor类型 当开启Recordset对象时,可以在CursorType属性指定不同的cursor类型:
如果应用程式只需要读取一个RecordSet,并不需要做新增、修改、删除的动 作,那么用Forward-only(只向前)的Recordset对象,可以明显提高应用程式的 执行性能。 需注意使用Forward-only(只向前)的Recordset时,下面的方法和属性将无法使 用: .Bookmark属性
使用ASP制作动态页面时,绑定数据库后,总要打开记录集:rs.open sql,conn,A,B(A与B表示各数字值),那这A与B到底表示什么意思呢? A: ADOPENFORWARDONLY(=0) 只读,且当前数据记录只能向下移动 ADOPENKEYSET(=1) 只读,当前数据记录可自由移动 ADOPENDYNAMIC(=2) 可读写,当前数据记录可自由移动 ADOPENSTATIC(=3) 可读写,当前数据记录可自由移动,可看到新增记录 B: ADLOCKREADONLY(=1) 缺省锁定类型,记录集是只读的,不能修改记录 ADLOCKPESSIMISTIC(=2) 悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。 ADLOCKOPTIMISTIC(=3) 乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。 ADLOCKBATCHOPTIMISTIC(=4) 批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。 当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。 对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间, 数据在这段时间被更新。这减少了资源的使用。
问题:请教各位rs.open的参数及其用法。 解答: RS.OPEN SQL,CONN,A,B 参数A为设定游标的类型,其取值为: 0 仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark 1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark 2 动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。 3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动 参数B为记录集的锁定类型,其取值为: 1 锁定类型,默认的,只读,不能作任何修改 2 当编辑时立即锁定记录,最安全的方式 3 只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等 4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的 (责任编辑:admin) |