精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● ASP>>数据库>>[转载]有关游标和加锁方式的看法

主题:[转载]有关游标和加锁方式的看法
发信人: nightcat()
整理人: qcrsoft(2002-05-21 17:49:19), 站内信件
有关游标和加锁方式的看法

关键词:Sql Server, ASP

    就启明星提出的在SQL Server中使用加锁的问题,我就以前
的经验和收集的一些资料简单的提出我自己的一些看法,不知道
对启明星是否有所帮助:
一般而言,下面是个典型的打开数据库的过程。
<%
'游标类型
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'加锁类型
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
>%
                      
    <% Set Conn = Server.CreateObject('ADODB.Connection') >%
    <% Set RSMov = Server.CreateObject('ADODB.RecordSet') >%
    <% Conn.Open 'Soc', '', '' >%
    <% RSMov.Open sqlMov, Conn, adOpenKeyset, adLockReadOnly >%
游标使用时是比较灵活的,它有时用来描述一个记录集,有时又是用来描述当前
记录集
中某一条记录的指针。游标主要是用来建立一个关系数据库中行/列关系的一种S
QL可利
用的访问格式。与游标有关系的技术术语还有一个叫Bookmark的。如果你选择的
游标方式
支持Bookmarks。数据库将提供有关记录数目的强大功能。
在上面写出的那么多游标方式中,adOpenDynamic是没有太的用处的,虽然它提供
实时显示
数据库中的记录的所有更新操作的功能,但是因为并不是所有的数据库都支持该
游标方式,
没有移植性的游标方式对当前错综复杂的数据库来说真是用处不大。
在实际的编程中,我相信大家使用得最频繁的是adOpenStatic方式,当然这种方
式的缺点是
不能够就、实时反应出数据库中内容改变时的状况。如果要想看到数据库被其它
用户改变的
状况,可使用adOpenKeyse方式(但是它只能够反应出被编辑的改变情况,也就是
说不能够
反映出新增和删除记录的改变情况。)
其实上面的内容大家一般都可以在微软的技术参考资料中找到,下面来说说在使
用这些游标
方式和加锁方式时要注意到的问题。
1。首先要注意到的是这两种方式在混合使用时的问题,就是说你同时设置游标方
式和加锁方式。
除非你是在使用Access数据库,一般而言当你混合使用时是并不能够得到你预期
想要的
游标方式和加锁方式的。例如,如果你同时将游标设置为adOpenStatic方式,而
将加锁设置为
adLockOptimistic,你将得不到adOpenStatic方式的游标,你这时使用的游标方
式将是
adOpenKeyset,也就是说你使用ADO的话,它将返回adOpenKeyset的游标。
2。其次,游标和加锁的混合使用还会导致ADO返回的不是你想要的加锁方式,AD
O会改变你的加锁
方式。例如,在默认状态下游标方式是adOpenForwardOnly,在使用这种游标方式
的同时如果
你使用的加锁方式为-1(就是让数据源来判断加锁方式)或则adLockReadOnly,
那么这种混合方式
基本上不支持RecordSet的任何方法,也就是说RecordSet的任何方法将返回Fals
e
(你的recordcount,absoultpage,addnew,delete,update等都会返回-1,-1就是表
示不支持该属性),
但是这时如果你使用的是adOpenForwardOnly游标方式和其它的加锁方式混合,它
反而
会支持填加,删除和更新。




--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.124.32]

[关闭][返回]