记录集游标和锁定类型

你可以用四种类型的游标打开一个记录集。游标决定了你可以对一个记录集进行什么操作。游标还决定了其他用户可以对一个记录集进行什么样的改变。下面列出了游标的不同类型和限制：

- adOpenFowardOnly。使用前向游标，你只能在记录集中向前移动。

- adOpenKeyset。使用Keyset游标，你可以在记录集中向前或向后移动。如果另一个用户删除或改变了一条记录，记录集中将反映这个变化。但是，如果另一个用户添加了一条新记录，新记录不会出现在记录集中。

- adOpenDynamic。使用动态游标，你可以在记录集中向前或向后移动。其他用户造成的记录的任何变化都将在记录集中有所反映。

- adOpenStatic。使用静态游标，你可以在记录集中向前或向后移动。但是，静态游标不会对其他用户造成的记录变化有所反映。

在缺省情况下，当你打开一个记录集时，将用前向游标打开它。这意味着你只能用MoveNext方法在记录集中向前移动。对记录集的其它操作将不受支持。

前向游标的好处是它比较快。无论何时，如果前向游标可以实现你的要求，你就应该使用前向游标。但是，如果你需要用功能更强的游标打开记录集，你可以使用如下的脚本：

<!--#INCLUDE VIRTUAL=

”ADOVBS.inc”-->

<%

Set MyConn=Sever.CreateObject(

“ADODB.Connection”)

Set RS=Sever.CreateObject(

“ADODB.RecordSet”)

MyConn.Open

“FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn

RS.Open

“SELECT * FROM Mytable”,MyConn,adOpenDynamic

RS.Close

MyConn.Close

%>

要用一种特定的游标打开记录集，你必须显式地创建这个记录集。然后用该游标类型打开它。要做到这一点，你首先要创建记录集对象的一个实例。接下来，你要用Open方法，通过一个连接和一种游标类型，打开这个记录集。在这段脚本中，用连接对象MyConn和一个动态游标打开了记录集RS。

打开记录集时，你也可以指定锁定类型。锁定类型决定了当不止一个用户同时试图改变一个记录时，数据库应如何处理。你可以指定下面的四种锁定类型：

- adLockReadOnly。指定你不能修改记录集中的记录。

- adLockPessimistic。指定在编辑一个记录时，立即锁定它。

- adLockOptimstic。指定只有调用记录集的Update方法时，才锁定记录。

- adLockBatchOptimstic。指定记录只能成批地更新。

在缺省情况下，记录集使用只读锁定。要指定不同的锁定类型，你可以在打开记录集时包含这些锁定常量之一。这里有一个例子：

<!--#INCLUDE VIRTUAL=

”ADOVBS.inc”-->

<%

Set MyConn=Sever.CreateObject(

“ADODB.Connection”)

Set RS=Sever.CreateObject(

“ADODB.RecordSet”)

MyConn.Open

“FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn

RS.Open

“SELECT * FROM Mytable”,MyConn,adOpenDynamic，adLockPessimistic

RS.Close

MyConn.Close

%>

这个脚本与上一个基本相同，只是增加了锁定类型。当打开记录集RS时，将使用adLockPessimistic锁定。这意味着这个记录集中的记录可以被修改。（下一集中将讨论如何修改）

最后，打开一个记录集时，你可以指定一个Options参数。Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。

你可以使用下面的常量作为Options参数：

- adCMDTable。被执行的字符串包含一个表的名字。

- adCMDText。被执行的字符串包含一个命令文本。

- adCMDStoredProc。被执行的字符串包含一个存储过程名。

- adCMDUnknown。不指定字符串的内容。（这是缺省值。）

在下面的脚本中，Options参数用来告诉ADO，命令字符串的内容是命令文本：

<!--#INCLUDE VIRTUAL=

”ADOVBS.inc”-->

<%

Set MyConn=Sever.CreateObject(

“ADODB.Connection”)

Set RS=Sever.CreateObject(

“ADODB.RecordSet”)

MyConn.Open

“FILEDSN=d:\Program Files\

Common Files\ODBC\Data Sources\MyData.dsn

RS.Open

“SELECT * FROM Mytable”,MyConn,adOpenDynamic，adCMDText

RS.Close

MyConn.Close

%>