首页 > 程序开发 > Web开发 > asp >

ASP 3.0高级编程(三十九)

2006-09-30

8.4.3 创建记录集        创建一个记录集十分容易,通过调用Recordset对象的Open方法来实现:        Recordset.Open [Source], [ActiveConnection], [CursorT

8.4.3 创建记录集
创建一个记录集十分容易,通过调用Recordset对象的Open方法来实现:
Recordset.Open [Source], [ActiveConnection], [CursorType], [LockType], [Options]
其参数及说明如表8-3所示:
表8-3 Open方法的参数及说明
参 数
说 明

Source
数据源。可以是数据库中的表名、存储的查询或过程、SQL字符串、Command对象或适用于提供者的其他命令对象

ActiveConnection
记录集使用的连接。可以是一个连接字符串或者一个打开的Connection对象

CursorType
使用的光标类型。必须是定义的光标类型中的一种,缺省值为adForwardOnly

LockType
使用的锁定类型。必须是定义的锁定类型中的一种,缺省值为adLockReadOnly

Options
告诉提供者Source参数的内容是什么,如表、文本字符串等等

例如,要打开数据库pubs中authors表上的记录集:
Dim rsAuthors

Set rsAuthors = Server.CreateObject("ADODB.Recordset")

rsAuthors.Open "authors", strConn

Do something here

rsAuthors.Close
Set rsAuthors = Nothing
注意,有几个参数没有指定。实际上,所有的参数都是可选的,可以在打开记录集之前为它们设置相应的属性值:
Dim rsAuthors

Set rsAuthors = Server.CreateObject("ADODB.Recordset")

With rsAuthors
.Source = "authors"
.ActiveConnection = strConn
.CursorType = adOpenForwardOnly
.LockType = adLockReadOnly
.Open
End With

Do something here

rsAuthors.Close
Set rsAuthors = Nothing
一旦打开记录集,当前指针自动地位于第一条记录上。如果在记录集中没有记录,那么EOF和BOF属性都是True:
rsAuthors.Open "authors", strConn

If rsAuthors.BOF and rsAuthors.EOF Then
Recordset is empty
End If
1. Options参数
Open方法的Options参数允许指定命令文本内容。它可以是以下CommandTypeEnum常数之一:
· adCmdText:文本命令,比如SQL字符串。
· adCmdTable:表名。
· adCmdStoredProc:存储过程名。
· adCmdFile:保存的记录集的文件名。
· adCmdTableDirect:表名。
· adCmdURLBind:URL地址。
adCmdTable与adCmdTableDirect的区别很小,如果想使用表中的全部列,使用adCmdTableDirect将由于ADO执行了某些内部优化而使运行速度变得稍快一些。
如果没有指定命令的类型,ADO必须推算出执行的命令的类型,这将导致额外的开销。
这里还有两个选项:adCmdUnspecified表示没有指定类型;adCmdUnknow表示命令的类型未知。一般地可能不会使用它们。
额外的选项
Options参数可以是以上常数中的任一个,但也可以加入下列ExecuteOptionEnum常数:
· adAsyncExcute:异步地执行命令。
· adAsyncFetch:取得初始的行集后,异步地获取剩下的行。
· adAsyncFetchBlocking:除了获取记录不阻止命令运行以外,其他与adAsyncFetch相似。
· adExechteNoRecords:命令不返回任何记录。
异步处理意味着在后台执行操作,可以运行命令,然后继续其他工作,而不需要等待其执行完毕(同步操作)。当创建用户界面时,这显得特别方便,因为可以从命令执行中返回,向用户显示一些内容,而同时数据的获取仍然在后台进行。当返回记录集时,这对ASP程序员来说不是很有用,因为脚本语言不支持ADO事件,所以记录集何时已完成填充移无法得知。当处理更新、删除或插入数据命令以及不返回记录集的时候,可以使用异步操作,即仅在不关心结果的情况下才能使用。
在另一方面,adExecuteNoRecords选项十分有用。它告诉ADO执行的命令不返回任何数据。所以,就没有必要创建记录集(总之,可能为空)。这会加速正在运行的更新或添加数据的查询操作。
为了加入这些选项之一,可以使用Or符号(等同于加号“+”)
adCmdStoredProc Or adExecuteNoRecords

adCmdStoreProc + adExecuteNoRecords
在下一章,将看到对相关内容更详细的介绍,因为这在处理命令(而不是记录集)时会更有用。
2. 在记录集中移动
一旦打开一个记录集,经常需要遍历每一条记录。这需要使用EOF属性。当到达记录集的末尾时,EOF就变为True,因为可以这样创建一个循环:
rsAuthors.Open "authors", strConn

While Not rsAuthors.EOF
Response.Write rsAuthors("au_lname:) & ", " & _
rsAuthors("au_fname") & "<BR>"
rsAuthors.MoveNext
Wend
上面的例子一直循环到EOF属性为True时才退出。MoveNext方法用于移到下一条记录。
如果记录集允许向后移动,则可以使用MovePrevious方法。在这种情况下,循环中需要检测BOF属性值。另外分别还有移动到第一条和最后一条记录的MoveFirst和MoveLast方法:
rsAuthors.Open "authors", strConn, adOpenDynamic
Now on first record

rsAuthors.MoveLast
Now on last record
rsAuthors.MovePrevious
rsAuthors.MovePrevious
Now three rows from the end of the recordset

rsAuthors.MoveFirst
Back at the beginning again
3. 使用Fields集合
Fields集合包含记录集中每一字段(列)的Fields对象。Fields集合是记录集的缺省集合,因此在访问字段时可以省略,就如同上面的While...Wend例子中的情况。因此,有多种访问字段的方法:
rsAuthors.Fields("au_lname").Value
rsAuthors("au_lname).Value
rsAuthors(1).Value
rsAuthors.Fields(1).Value
可以使用字段名,或使用它在集合中的位置。使用名字是最好的,因为这样将使代码更易于维护。
Value属性是字段的缺省属性,因此也可以省略,比如:
rsAuthors("au_lname")
如果想遍历所有字段,可以使用For Each结构:
For Each fldAuthor In rsAuthors.Fields
Response.Write fldAuthor.Name & " : " & _
fldAuthor.Value & "<BR>"
Next
这个例子将打印每一个字段的名字和值。
4. 书签
当在记录集中移动时,可能需要保留记录的位置,以后再移回来。同真实的书签相似,一个记录集书签是一个指向单个记录的唯一的指针。
为了使用书签,只需将Bookmark属性值赋予一个变量:
varBkmk = rsAuthors.Bookmark
然后,可以在记录集中移动,以后可以通过相反的命令将记录移到做过书签标记的相应记录上:
rsAuthors.Bookmark = varBkmk
在记录集中查找记录时,书签是非常有用的。在本章稍后的8.4.5节中有一个相关的例子。
注意,并非所有记录集都支持书签,Supports方法(在下面讨论)将能识别其是否支持书签。
值得注意的重要一点是,不能跨越不同的记录集使用书签,即使这些记录集是相同的命令创建的。考虑一下以下代码:
rsAuthors.Open "authors", strConn
rsAuthorsOther.Opne "authors", strConn

varBkmk = rsAuthors.Bookmark
varBkmkOther = rsAuthorsOther.Bookmark

尽管两个记录集是用相同的命令创建的,但记录集的书签是不一样的。
可以使用Clone方法获得可交换的书签,但在这里我们不讨论它。
5. 支持的功能
如上所述,并非所有的记录集都支持书签。还有许多其他的记录集选项也不是被所有的提供者或记录集类型支持的,因此可以用Supports方法验证一下。
Supports方法使用一个或多个CursorOptionEnum值作为参数,返回True或False表明是否支持该选项。这些值的列表相当庞大,所以将其列于附录F中。
例如:
If rsAuthors.Supports(adBookmark) Then
The recordset supports bookmarks
varBkMk = rsAuthors.Bookmark
End If
可以使用Or或加号“+”组合多个常数:
&n
相关文章
最新文章
热点推荐