网络编程
位置:首页>> 网络编程>> Asp编程>> Rs.Open参数说明

Rs.Open参数说明

  发布时间:2008-05-12 22:43:00 

标签:rs.open,参数,sql

Rs.Open参数说明

在ASP中经常用Rs.Open sql,conn,1,1这样的方式打开数据库,但仍有一部分同行不知道这是嘛意思,现整理如下:

Rs.Open语法如下:rs.Open   Source,ActiveConnection,CursorType,LockType

Source为sql语句,ActiveConnection为数据库连接,CursorType是游标,LockType是数据锁定类型.

CursorType

常量                                 说明                        
adOpenForwardOnly(值为0)   (默认值)打开仅向前类型游标。    
adOpenKeyset(值为1)               打开键集类型游标。    
adOpenDynamic(值为2)             打开动态类型游标。    
adOpenStatic(值为3)               打开静态类型游标。    
  
  
-----------------------  
LockType  
  
  
常量   说明    
adLockReadOnly (值为1) (默认值)只读   —   不能改变数据。    
adLockPessimistic(值为2)   保守式锁定(逐个)   —   提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。    
adLockOptimistic(值为3)   开放式锁定(逐个)   —   提供者使用开放式锁定,只在调用   Update   方法时才锁定记录。    
adLockBatchOptimistic(值为4)   开放式批更新   —   用于批更新模式(与立即更新模式相对)。    

CursorType
0             仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark  
1             键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark  
2             动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。  
3             静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动  
    
   LockType      
    LockType为记录集的锁定类型,其取值为:  
1             锁定类型,默认的,只读,不能作任何修改  
2             当编辑时立即锁定记录,最安全的方式  
3             只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等  
4             当编辑时记录不会被锁定,而更改、插入和删

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呢?
 第三个参数表示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:无法锁定资料表 <name>,目前正被使用者<name>在机器<name>上使用。先等待一下,然后再重试一次。

3197:RecordSet的资料在被开启之后发生了改变。因为您和另一个使用者尝试同时改变同一笔资料,可以再试一下重新读取该RecordSet,以取得最新的资料。

3186:无法储存,目前正被机器 <name> 上的 <name> 使用者锁定。当一个使用者尝试更新一资料对应页,而且该页被另一个使用者锁定时,就会发生这个错误。要处理这个错误,则先等待一会儿,然后重新储存该RecordSet。

3260:无法更新,目前,被机器 <name> 上的使用者 <name> 锁定。当您编辑
Recordset资料或呼叫了AddNew方法,而该资料对应页包含有被锁定的记录时,就会发生这个错误要处理这个错误,先等待一会儿,然后再一次储存该RecordSet。或者您可以通知遇到这个问题的使用者,并允许使用者选择是否要再重试这个操作。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com