GetRows的用法详解!

大家应该都知道 Recordset 有个 GetRows 属性,但是真正使用的不多,我也是最近才用的!汗……

其实这个属性很简单,就是把数据集输出到一个数组中。但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法!

比如一个分类的表 T_Cate,结构和数据如下:

ID   |   Title   |  Intro
-----------------------------------------
1    |   新闻   |  这里是新闻
2    |   教程   |  这里是教程
3    |   下载   |  这里是下载

好了,表建立好了,数据也有了,下面我们就要用到GetRows咯!
<%
Dim Rs_Cate
Dim Arr_Cate
Set Rs_Cate=Conn.ExeCute("Select ID,Title,Intro FROM T_Cate orDER BY ID ASC")
Arr_Cate=Rs_Cate.GetRows
Set Rs_Cate=Nothing

%>
好了表数据已经导出到数组了!下面我们将遍历这个数组
<%
Dim Arr_CateNumS,Arr_CateNumI
Arr_CateNumS=Ubound(Arr_Cate,2)  '得到数组中数据的下标
For Arr_CateNumI=0 To Arr_CateNumS
    Response.Write("ID:"&Arr_Cate(0,Arr_CateNumI)&" | 标题:"&Arr_Cate(1,Arr_CateNumI)&" | 介绍:"&Arr_Cate(2,Arr_CateNumI)&"<br>")
Next
%>
呵呵,好了,输出的数据为:
ID:1 | 标题:新闻 | 介绍:这里是新闻
ID:2 | 标题:教程 | 介绍:这里是教程
ID:3 | 标题:下载 | 介绍:这里是下载


Rs.GetRow可以更有效率地获取小容量数据(不适合大容量数据,尤其涉及大对象的时候,容易暴掉)
但是Rs.GetRow返回的是一个二维数组,我们经常不知道哪段对哪段。这个很麻烦,于是编了一小段程序方便调试用:


  Dim ds
    Set objRS=objConn.Execute("Select * FROM [blog_Upload] Where ([ul_Quote] LIKE '%" & CStr(ID) & "%') ")
        ds=objRS.GetRows
    objRS.Close()
    Set objRS=Nothing

' 建立一个表格
Response.Write "Written By Sipo(www.dc9.cn)<table align=""center"" border=""1"">"
Response.Write vbcrlf
Response.Write "<tr><td></td>"
For j = 0 To UBound(ds, 1)
Response.Write "<td>ds("&j&",X)</td>"
Next
Response.Write "</tr>"
' 每一行
  For i = 0 To UBound(ds, 2)
    Response.Write "<tr><td>ds(X,"&i&")</td>"& vbcrlf
    ' 每一列
    For j = 0 To UBound(ds, 1)
      Response.Write "<td>"
      If IsNull(ds(j, i)) Then
      Response.Write "Null"
      Else
      Response.Write ds(j, i)
      End If
      Response.Write "<br>"
      Response.Write "<b>ds("&j&","&i&")</b>"
      Response.Write "</td>"
    Next

    Response.Write "</tr>" & vbcrlf
  Next

  Response.end





关于GetRows的小资料:
ADO也提供更有效率方法来取得数据。GetRows 方法传回一个二维的数组变量,每一行对应Recordset中的一笔记录,且每一列对应到记录中的字段。此方法的语法如下:

varArray = rs.GetRows([Rows], [Start], [Fields])

Rows 是要读取记录的数量;如果想要取得Recordset所有记录,可用-1或省略此参数。Start 是指出第一个被读取记录的书签;也可以是下列列举常数中的一个:0-adBookmarkCurrent(目前记录)、1-adBookmarkFirst(第一笔记录)、或2-adBookmarkLast(最后记录)。

Fields 是可选择的字段名称数组,其用来限制要读取的数据量。(也可指定单一字段名称、单一字段索引、或者一个字段索引数组)。当设定 Rows 为少于Recordset记录笔数时,第一笔未读取的记录变成现行记录。若省略 Rows 参数或设定为-1-adGetRowsRest或大于未读取的笔数时,GetRows 方法会读取所有记录并让Recordset在EOF状态,而不会产生任何错误。

当处理目的变量数组的数据时,应该记得数据储存方式是有点相反的感觉:数组中第一维定义Recordset的字段(数据行),第二维定义Recordset的数据列。

GetRows 方法通常比一次读一笔记录的循环要来得快些,但使用这方法时,必须确定Recordset未包含太多记录;否则,会很容易以一个非常大的变量数组来填满所有内存。基于相同的原因,得小心不要包括任何BLOB(Binary Large Object)或CLOB(Character Large Object)字段;若如此做的化,应用程序一定会爆掉,特别是对于较大的Recordset而言。最后,记住此方法传回的变量数组是以0为基底的;传回记录的笔数是UBound(values,2)+1,传回字段数是UBound(value, 1)+1。


[本日志由 NetFox 于 2007-02-17 04:08 PM 编辑]
上一篇: 解决IE无法在新窗口打开
下一篇: 解决Msgsrv32.exe没有响应!
文章来自: 蓝色
引用通告: 查看所有引用 | 我要引用此文章
Tags: GetRows
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭