⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ado如何锁定recordset的记录呢?.htm

📁 较为详细的介绍了asp自定义的各种函数,方便asp的各种开发.
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.abc800.com/news/artdetail.asp?id=836 -->
<HTML><HEAD><TITLE>ADO如何锁定RecordSet的记录呢?</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR><LINK 
href="ADO如何锁定RecordSet的记录呢?.files/putong_1t" rel=StyleSheet type=text/css>
<SCRIPT language=javascript 
src="ADO如何锁定RecordSet的记录呢?.files/fun_Script.js"></SCRIPT>
</HEAD>
<BODY background=ADO如何锁定RecordSet的记录呢?.files/r_bg.gif>
<P align=center><BR></P>
<TABLE align=center class=tableFrame height=311 width="90%">
  <TBODY>
  <TR align=middle>
    <TD align=right bgColor=#decbad class=listcelltitle height=274 vAlign=top 
    width=717>
      <P align=center><BR><FONT color=#000000 
      style="FONT-SIZE: 14px"></FONT><FONT color=#000080 
      style="FONT-SIZE: 14px"><B>ADO如何锁定RecordSet的记录呢?</B></FONT><FONT 
      color=#000000 style="FONT-SIZE: 14px"><BR></P>
      <P align=right>更新日期:2002-10-18 阅读次数:614</FONT></P>
      <P align=left 
      style="FONT-SIZE: 14px"><BR>&nbsp;&nbsp;前面介绍使用Recordset(记录集合)对象的方法如下:<BR>Set 
      rs = 
      Server.CreateObject("ADODB.Recordset")<BR>&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;rs.Open 
      SQL指令, Conn, 1, 1 ‘读取<BR><BR>&nbsp;&nbsp;rs.Open SQL指令, Conn, 1, 3 
      ‘新增、修改、或删除<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;到底rs.Open后接的第三个参数1和第四个参数是什么意思呢?为何第四个参数在读取时要用1,新增、修改、或删除时要用3呢?<BR>&nbsp;&nbsp;第三个参数表示cursor类型;<BR>&nbsp;&nbsp;第四个参数表示RecordSet的锁定型态。<BR>&nbsp;&nbsp;详细介绍如下:<BR>&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;RecordSet的锁定<BR><BR>&nbsp;&nbsp;当开启Recordset对象时,您也可以用LockType属性指定锁定的型态:<BR><BR><BR><BR>1:唯读(ReadOnly),不允许更新,为预设值。 
      <BR>2:悲观锁定( Pessimistic 
      lock),在编辑Recordset资料或使用AddNew方法,一开始执行就立即锁定此记录或包含资料记录的资料页,并维持锁定直到使用Update方法将变更写回到资料库为止。<BR>3:乐观锁定(Optimistic 
      lock),使用Update方法将变更写回到资料库时才锁定此记录。<BR>4:批次乐观锁定(Batch Optimistic 
      lock),使用UpdateBatch方法将多笔变更的记录批次写回到资料库时,才锁定此批记录。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;当您使用悲观锁定(Pessimistic 
      Lock)时,一旦编辑Recordset资料或呼叫了AddNew方法时,就会锁定包含目前编辑RecordSet的资料对应页,直到明确地确认(Commit)或取消这个RecordSet的变更后,它才会释放这个锁定。<BR>&nbsp;&nbsp;&nbsp;&nbsp;悲观锁定的主要优点,是取得锁定之后,只要RecordSet还被锁定着,就不会发生任何锁定冲突。由于一个使用者开始编辑RecordSet后,其他使用者就无法改变它,所以悲观锁定是保证应用程式能读取到目前最新资料的唯一方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;悲观锁定的缺点,是在编辑和锁定该RecordSet当中,包含该RecordSet的整个资料对应页都会被锁定。如果当使用者开始编辑和锁定RecordSet后,在RecordSet被锁定期间过了很久才明确地确认(Commit)或取消这个RecordSet的变更,就将产生一个问题,这不仅锁定了使用者正在编辑的RecordSet,而且还可能会锁定存在该被锁定资料对应页内其它的RecordSet。<BR>&nbsp;&nbsp;&nbsp;&nbsp;当您使用乐观锁定(Optimistic 
      Lock)时,只会在使用Update方法变更RecordSet时,才锁定该资料对应页,所以能使锁定的时间为最短,这是乐观锁定的主要优点。<BR>&nbsp;&nbsp;&nbsp;&nbsp;乐观锁定的缺点,是当使用者开始编辑RecordSet时,无法确定更新是否会成功。如果另一个使用者改变了第一个使用者正在编辑的RecordSet,那么建立在乐观锁定的更新将会失败。<BR>&nbsp;&nbsp;&nbsp;&nbsp;譬如甲和乙都在编辑相同的RecordSet,若甲开始以乐观锁定编辑一个RecordSet,因为甲使用的是乐观锁定,并没有真正锁定该RecordSet,所以无法禁止乙尝试编辑相同的RecordSet。<BR>&nbsp;&nbsp;&nbsp;&nbsp;于是乙开始编辑相同的RecordSet。但是,乙也不知道甲正在编辑该RecordSet,也看不到最新的资料。<BR>&nbsp;&nbsp;&nbsp;&nbsp;因为乙也正在编辑该资料录,所以当甲尝试储存他的变更时,就会收到一个错误。<BR>&nbsp;&nbsp;&nbsp;&nbsp;当您使用异动(transaction)功能时,乐观锁定将会转换成悲观锁定。因为在你做交易确认(Commit)之前,异动一直会做写入锁定 
      <BR>&nbsp;&nbsp;(Write-Lock)的功能,所以转换成悲观锁定。<BR>&nbsp;&nbsp;&nbsp;&nbsp;乐观更新(optimistic 
      update)是逐笔记录进行的。您可以让使用者能在自己的电脑中,暂存(cache)多笔记录的变更,然后使用批次处理,一次把这些多笔变更的记录传给伺服器进行更新,这样效率比较高。这个方式称为批次乐观更新(Batch&nbsp;&nbsp;Optimistic 
      Update)。<BR>&nbsp;&nbsp;&nbsp;&nbsp;批次乐观更新使用的锁定方式为批次乐观锁定(Batch Optimistic 
      lock),使用UpdateBatch方法将多笔变更的记录批次写回到资料库时,才锁定此批资料记录。<BR>&nbsp;&nbsp;&nbsp;&nbsp;在Recordset对象上设定锁定时,如果锁定失败,则会产生错误。<BR>&nbsp;&nbsp;&nbsp;&nbsp;譬如有另一个使用者以锁定的模式,开启了Recordset对象时,那么当您尝试锁定该Recordset对象时,就会发生错误。<BR>&nbsp;&nbsp;错误可能为:<BR>&nbsp;&nbsp;3260:RecordSet被锁定。在您遇到这个错误时,可以先等待一下,然後再重试一次。&nbsp;&nbsp;3262:无法锁定资料表 
      &lt;name&gt;,目前正被使用者&lt;name&gt;在机器&lt;name&gt;上使用。先等待一下,然后再重试一次。 
      <BR>&nbsp;&nbsp;3197:RecordSet的资料在被开启之后发生了改变。因为您和另一个使用者尝试同时改变同一笔资料,可以再试一下重新读取该RecordSet,以取得最新的资料。 
      <BR>&nbsp;&nbsp;3186:无法储存,目前正被机器 &lt;name&gt; 上的 &lt;name&gt; 
      使用者锁定。当一个使用者尝试更新一资料对应页,而且该页被另一个使用者锁定时,就会发生这个错误。要处理这个错误,则先等待一会儿,然后重新储存该RecordSet。 
      <BR>&nbsp;&nbsp;3260:无法更新,目前,被机器 &lt;name&gt; 上的使用者 &lt;name&gt; 
      锁定。当您编辑Recordset资料或呼叫了AddNew方法,而该资料对应页包含有被锁定的记录时,就会发生这个错误要处理这个错误,先等待一会儿,然后再一次储存该RecordSet。或者您可以通知遇到这个问题的使用者,并允许使用者选择是否要再重试这个操作。<BR><BR>cursor<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;cursor(资料指标)是一个指标或指标的集合,它指向根据某条件从资料库中取回的资料。cursor的特性如下: 
      <BR><BR><BR>可以表示单一资料表中的部份或全部RecordSet。 
      <BR>可以表示多资料表的连结(join)中的部份或全部RecordSet。 <BR>可以表示没有RecordSet。 
      <BR>在cursor层次上或者在资料栏层次上,cursor可以是只读的或可更新的。 
      <BR>cursor既可以双向移动(表示在RecordSet中能向前或向后移动),又可以是仅向前移动。 
      <BR>cursor可以存在用户端的电脑中,也可以存在服务器上。<BR><BR><BR>cursor所在位置<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor需要暂存的资源来储存资料,这些资源为RAM、虚拟记忆体、暂存档或资料库。如果这些资源在用户端的电脑中,cursor就称为client-side(客户端)cursor。对於这种类型的cursor,服务器将cursor所代表的资料和cursor自身需要的资料传到用户端,由用户端电脑来管理暂存的资源。<BR>&nbsp;&nbsp;&nbsp;&nbsp;另外一种类型的cursor,称为server-side(服务器端)cursor。对於这种类型的cursor,使用 
      <BR>&nbsp;&nbsp;服务器上的暂存资源来管理RecordSet对象。对於server-side 
      cursor,只有由cursor选中的RecordSet才透过网路传送给用户端的电脑。因此在网路通讯或频宽出现问题时,使用这种类型的cursor在性能上有很大的提升。但是,因为需要服务器上的RAM和磁碟空间等资源,因此必须保证服务器有足够资源来管理所有客户端电脑请求的cursor。<BR>&nbsp;&nbsp;CursorLocation属性,可以选择cursor的所在位置,是在用户端电脑还是服务器上: 
      <BR><BR><BR>3:使用用户端cursor。此选项对小的RecordSet效果较好,但对大的结果集,其性能迅速下降。&nbsp;&nbsp;&nbsp;<BR>2:使用服务器cursor。对於大多数的大型作业来说,这种类型的cursor有较好的性能。<BR><BR><BR>cursor类型<BR>&nbsp;&nbsp;当开启Recordset对象时,可以在CursorType属性指定不同的cursor类型: 
      <BR><BR><BR>0:Forward-only(只向前):只能向前移动,这是缺省值。 <BR>1:Keyset(索引键集) 
      <BR>2:Dynamic(动态) 
      <BR>3:Static(静态)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;如果应用程式只需要读取一个RecordSet,并不需要做新增、修改、删除的动作,那么用Forward-only(只向前)的Recordset对象,可以明显提高应用程式的执行性能。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;需注意使用Forward-only(只向前)的Recordset时,下面的方法和属性将无法使用: 
      <BR><BR>Bookmark属性 <BR>Clone方法 <BR>Move方法 <BR>MoveFirst方法 <BR>MoveLast方法 
      <BR>MovePrevious方法<BR>OpenRecordset方法 <BR><BR><BR>原作者:不详<BR>来 
      源:不详<BR><BR></P></TD></TR>
  <TR>
    <TD align=right bgColor=#decbad class=listcelltitle height=29 vAlign=top 
    width=717><INPUT class=button name=Submit2 onclick=javascript:window.close() style="FONT-SIZE: 9pt" type=button value=关闭窗口> 
      &nbsp; </TD></TR></TBODY></TABLE><BR></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -