您的位置:首页精文荟萃软件资讯 → ADO如何锁定RecordSet的记录呢?

ADO如何锁定RecordSet的记录呢?

时间:2004/10/7 19:04:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



            前面介绍使用Recordset(记录集合)对象的方法如下:
Set rs = Server.CreateObject("ADODB.Recordset")


rs.Open SQL指令, Conn, 1, 1 ‘读取

rs.Open SQL指令, Conn, 1, 3 ‘新增、修改、或删除

到底rs.Open后接的第三个参数1和第四个参数是什么意思呢?为何第四个参数在读取时要用1,新增、修改、或删除时要用3呢?
第三个参数表示cursor类型;
第四个参数表示RecordSet的锁定型态。
详细介绍如下:


RecordSet的锁定

当开启Recordset对象时,您也可以用LockType属性指定锁定的型态:



1:唯读(ReadOnly),不允许更新,为预设值。
2:悲观锁定( Pessimistic lock),在编辑Recordset资料或使用AddNew方法,一开始执行就立即锁定此记录或包含资料记录的资料页,并维持锁定直到使用Update方法将变更写回到资料库为止。
3:乐观锁定(Optimistic lock),使用Update方法将变更写回到资料库时才锁定此记录。
4:批次乐观锁定(Batch Optimistic lock),使用UpdateBatch方法将多笔变更的记录批次写回到资料库时,才锁定此批记录。

当您使用悲观锁定(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,所以无法禁止乙尝试编辑相同的RecordSet。
于是乙开始编辑相同的RecordSet。但是,乙也不知道甲正在编辑该RecordSet,也看不到最新的资料。
因为乙也正在编辑该资料录,所以当甲尝试储存他的变更时,就会收到一个错误。
当您使用异动(transaction)功能时,乐观锁定将会转换成悲观锁定。因为在你做交易确认(Commit)之前,异动一直会做写入锁定
(Write-Lock)的功能,所以转换成悲观锁定。
乐观更新(optimistic update)是逐笔记录进行的。您可以让使用者能在自己的电脑中,暂存(cache)多笔记录的变更,然后使用批次处理,一次把这些多笔变更的记录传给伺服器进行更新,这样效率比较高。这个方式称为批次乐观更新(Batch Optimistic Update)。
批次乐观更新使用的锁定方式为批次乐观锁定(Batch Optimistic lock),使用UpdateBatch方法将多笔变更的记录批次写回到资料库时,才锁定此批资料记录。
在Recordset对象上设定锁定时,如果锁定失败,则会产生错误。
譬如有另一个使用者以锁定的模式,开启了Recordset对象时,那么当您尝试锁定该Recordset对象时,就会发生错误。
错误可能为:
3260:RecordSet被锁定。在您遇到这个错误时,可以先等待一下,然後再重试一次。 3262:无法锁定资料表 ,目前正被使用者在机器上使用。先等待一下,然后再重试一次。
3197:RecordSet的资料在被开启之后发生了改变。因为您和另一个使用者尝试同时改变同一笔资料,可以再试一下重新读取该RecordSet,以取得最新的资料。
3186:无法储存,目前正被机器 上的 使用者锁定。当一个使用者尝试更新一资料对应页,而且该页被另一个使用者锁定时,就会发生这个错误。要处理这个错误,则先等待一会儿,然后重新储存该RecordSet。
3260:无法更新,目前,被机器 上的使用者 锁定。当您编辑Recordset资料或呼叫了AddNew方法,而该资料对应页包含有被锁定的记录时,就会发生这个错误要处理这个错误,先等待一会儿,然后再一次储存该RecordSet。或者您可以通知遇到这个问题的使用者,并允许使用者选择是否要再重试这个操作。

cursor

cursor(资料指标)是一个指标或指标的集合,它指向根据某条件从资料库中取回的资料。cursor的特性如下:


可以表示单一资料表中的部份或全部RecordSet。
可以表示多资料表的连结(join)中的部份或全部RecordSet。
可以表示没有RecordSet。
在cursor层次上或者在资料栏层次上,cursor可以是只读的或可更新的。
cursor既可以双向移动(表示在RecordSet中能向前或向后移动),又可以是仅向前移动。
cursor可以存在用户端的电脑中,也可以存在服务器上。


cursor所在位置

cursor需要暂存的资源来储存资料,这些资源为RAM、虚拟记忆体、暂存档或资料库。如果这些资源在用户端的电脑中,cursor就称为client-side(客户端)cursor。对於这种类型的cursor,服务器将cursor所代表的资料和cursor自身需要的资料传到用户端,由用户端电脑来管理暂存的资源。
另外一种类型的cursor,称为server-side(服务器端)cursor。对於这种类型的cursor,使用
服务器上的暂存资源来管理RecordSet对象。对於server-side cursor,只有由cursor选中的RecordSet才透过网路传送给用户端的电脑。因此在网路通讯或频宽出现问题时,使用这种类型的cursor在性能上有很大的提升。但是,因为需要服务器上的RAM和磁碟空间等资源,因此必须保证服务器有足够资源来管理所有客户端电脑请求的cursor。
CursorLocation属性,可以选择cursor的所在位置,是在用户端电脑还是服务器上:


3:使用用户端cursor。此选项对小的RecordSet效果较好,但对大的结果集,其性能迅速下降。
2:使用服务器cursor。对於大多数的大型作业来说,这种类型的cursor有较好的性能。


cursor类型
当开启Recordset对象时,可以在CursorType属性指定不同的cursor类型:


0:Forward-only(只向前):只能向前移动,这是缺省值。
1:Keyset(索引键集)
2:Dynamic(动态)
3:Static(静态)

如果应用程式只需要读取一个RecordSet,并不需要做新增、修改、删除的动作,那么用Forward-only(只向前)的Recordset对象,可以明显提高应用程式的执行性能。
需注意使用Forward-only(只向前)的Recordset时,下面的方法和属性将无法使用:

Bookmark属性
Clone方法
Move方法
MoveFirst方法
MoveLast方法
MovePrevious方法
OpenRecordset方法

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本