返回首页
当前位置11: 主页 > ASP/.NET >

Rs.Open参数说明

时间:2010-03-07 14:30来源:未知 作者:admin 点击:
Rs.Open参数说明 在ASP中经常用Rs.Open sql,conn,1,1这样的方式打开数据库,但仍有一部分同行 不知道这是嘛意思,现整理如下: Rs.Open语法如下:rs.Open Source,ActiveConnection,CursorType,LockType Source为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。

或者您可以通知遇到这个问题的使用者,并允许使用者选择是否要再重试这个操

作。


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方法

 

 

使用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)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐内容