我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp基础/应用 > ASP 3.0高级编程(三十九)
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
在JSP中访问数据库大全(10-23)
ASP教程十一、调试ASP脚本(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

ASP 3.0高级编程(三十九) 

作者:佚名   来源:本站教程   点击:   日期:2007-03-21

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或加号“+”组合多个常数:
If rsAuthors.Supports(adBookmark Or adFind) Then
' The recordset supports bookmarks and use of Find
varBkMk = rsAuthors.Bookmark
End If

8.4.4 过滤记录集
过滤是一种暂时地限定记录集中可见记录的一种方法。如果仅显示记录集中的某些记录,但又不需要每次都重新查询数据库,这种方法非常有用。
1. 使用条件过滤
Filter属性拥有多个参数,其中一个就是条件表达式,它非常像SQL中Where子句:
rsAuthors.Filter = "state = 'ca'"
这个语句限定记录集只显示州名为ca的记录。使用这个过滤条件将使当前指针回到第一条匹配记录上。可以遍历记录集中的全部记录,并且只有匹配条件的记录才可见。
不仅仅限于单一条件,还可以使用And或Or把多个条件连接在一起:
rsAuthors.Filter = "au_lname = 'Homer' Or au_lname = 'Francis'"
这将过滤出姓为Francis或Homer的记录。
上面的例子显示了一个列匹配一个值的过滤方法,也可以使用下面操作符中的任何一种:
<:小于。
>:大于。
<=:小于等于。
>=:大于等于。
<>:不等于。
LIKE:通配符。
当使用通过配符操作时,可以使用“*”或“%”符号。例如:
rsAuthors.Filter = "au_lname LIKE 'Ho%'"
“*”或“%”作为一个通配符,匹配任何字符,因此上面的例子会匹配au_lname字段中以“Ho”字符开始的所有记录。
可以使用空字符串清空过滤条件,这样将显示全部记录:
rsAuthors.Filter = ""
2. 使

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·ASP中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。