用GetRows或GetString来提高ASP的速度

 

 

<!--#include file="include/DBConn.asp"--> 
<% 
'''''''''''''''基本的GetRows的使用'''''''''''''''''''' 
Call DBConnBegin() 
Set Rs = Server.CreateObject("ADODB.RecordSet") 
Sql = "Select top 10 id,AreaCode,AreaName,EnglishName from Info_Hotel" 
Rs.Open Sql,conn,1,1 
RecList = Rs.GetRows() 
Rs.Close 
   

%> 
<table width="600" border="0" cellspacing="0" cellpadding="0"> 
<%For i = 0 To Ubound(RecList,2)%> 
  <tr> 
    <td><%=RecList(0,i)%></td> 
    <td><%=RecList(2,i)%></td> 
    <td><%=RecList(3,i)%></td> 
  </tr> 
<%Next%> 
</table> 


<% 
''''''通过getrows实现数据库记录分页的一段代码-------------------- 
  Dim iStart, iOffset 
  iStart = Request("Start") 
  iOffset = Request("Offset") 
  if Not IsNumeric(iStart) or Len(iStart) = 0 then 
    iStart = 0 
  else 
    iStart = CInt(iStart) 
  end if 
  if Not IsNumeric(iOffset) or Len(iOffset) = 0 then 
    iOffset = 30 
  else 
    iOffset = Cint(iOffset) 
  end if 
  Response.Write "Viewing " & iOffset & " records starting at record " & iStart & "<BR>" 
  Dim objConn, objRS 
  Set objConn = Server.CreateObject("ADODB.Connection") 
  'objConn.Open "DSN=MP3" 
dim connstr 
字串9 
dim db 
db="csnjimageman.mdb" 
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"") 
objconn.Open connstr 
  Set objRS = Server.CreateObject("ADODB.Recordset") 
  objRS.Open "SELECT * FROM imageinfo", objConn 
  Dim aResults 
  aResults = objRS.GetRows 
  objRS.Close 
  Set objRS = Nothing 
  objConn.Close 
  Set objConn = Nothing 

  Dim iRows, iCols, iRowLoop, iColLoop, iStop 
  iRows = UBound(aResults, 2) 
  iCols = UBound(aResults, 1) 
  If iRows > (iOffset + iStart) Then 
    iStop = iOffset + iStart - 1 
  Else 
    iStop = iRows 
  End If 
  For iRowLoop = iStart to iStop 
    For iColLoop = 0 to iCols 
      Response.Write aResults(iColLoop, iRowLoop) & " " 
字串5 

    Next 
    Response.Write "<BR>" 
  Next   
  Response.Write "<P>" 
  if iStart > 0 then 
    'Show Prev link 
    Response.Write "<A HREF=""GetRows.asp?Start=" & iStart-iOffset & _ 
                   "&Offset=" & iOffset & """>Previous " & iOffset & "</A>" 
  end if 
  if iStop < iRows then 
    'Show Next link 
    Response.Write " <A HREF=""GetRows.asp?Start=" & iStart+iOffset & _ 
                   "&Offset=" & iOffset & """>Next " & iOffset & "</A>" 
  end if 
%> 







------------------------------------------------------- 


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的数据列。以下有个加载Recordset内所有记录某三个字段的范例: 

Dim values As Variant, fldIndex As Integer, recIndex As Integer 
values = rs.GetRows(, , Array("LastName", "FirstName", "BirthDate")) 
For recIndex = 0 To UBound(values, 2) 
    For fldIndex = 0 To UBound(values) 
        Print values(fldIndex, recIndex), 
    Next 
    Print 
Next 

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

GetString 方法跟 GetRows 是类似的,不过其传回以单一字符串形式存在的多重记录。GetString 语法如下: 

GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr]) 

Format 是结果的格式。GetString 还可能支持更多格式,但是目前唯一支持的格式是2- adClipString,所以实际上没有任何选择。NumRows 是要取得的列数。(使用-1或省略此参数来读取所有剩下的记录。)ColDelimiter 是行的分隔字符(预设为Tab字符)。 RowDelimiter 为记录的分隔字符(预设为换行字符)。NullExpr 是用来表示Null字段的字符串(预设为空字符串)。文件中说明只有当Format= adClipString时,最后三个参数才可使用,但是这警告没有多大意义,因为(如之前所提)此格式是目前唯一支持的。以下有个例子,其透过 GetString 方法来将数据汇出成以分号分隔的文字文件: 

Dim i As Long 
Open "datafile.txt" For Output As #1 
For i = 0 To rs.Fields.Count _ 1          ’ Export field names. 
    If i > 0 Then Print #1, ";"; 
    Print #1, rs.Fields(i).Name; 
Next 
Print #1, "" 
rs.MoveFirst                              ’ Export data. 
Print #1, rs.GetString(, , ";", vbCrLf);  ’ Don’t add an extra CR-LF here. 
Close #1 

GetString 方法不允许只汇出字段的子集合,也不允许修改汇出字段的顺序。如果需要这些额外的功能,应该使用 GetRows 方法且自行建立结果字符串。
 
 
 
 
 
 
 
 
 
 
-------------用GetString来提高ASP的速度-------------------------
 
 
 
许多ASP程序员都有过执行数据库查询,然后将查询结果用HTML表格的形式显示出来的经历吧。通常我们是这么做的:  

以下为引用的内容: <%
'Create connection / recordset
'Populate data into recordset object
%>
<TABLE>
<% Do While not rs.EOF %>
<TR>
<TD ><%=rs("Field1")% ></TD>
<TD ><%=rs("Field2")% ></TD>
.
</TR>
<% rs.MoveNext
Loop %>
</TABLE>

如果查询结果很多,服务器解释你的ASP script将花费大量的时间,因为有许多的
Response.Write语句要处理. 如果你将输出的全部结果放在一个很长的字符串里(从<TABLE >到</TABLE >),那么服务器只需解释一遍Response.Write语句,速度就会快得多 . 微软公司里的一些能干的家伙已经将想法变成了现实. (注意,这是一个ADO 2.0以上才有 的特性. 如果你还在使用以前版本的话,请升级到最新版)
有了GetString方法,我们就可以仅用一个Response.Write来显示所有的输出了,它就象 是能判断Recordset是否为EOF的DO ... LOOP循环. 
GetString的用法如下(所有的参数都是可选的): 

以下为引用的内容: String = recordset.GetString(StringFormat,
 NumRows,
 ColumnDelimiter,
 RowDelimiter, NullExpr) 
要从Recordset的结果里生成HTML表格,我们只需关心GetString的5个参数中的3个: 
ColumnDelimiter(分隔记录集的列的HTML代码),RowDelimiter(分隔记录集的行的HTML 代码),和NullExpr(当前记录为空时应生成的HTML代码). 就象你在下面生成HTML表格的 例子里所看到的那样,每列用<TD >...</TD >分隔,每行用<TR >...</TR >分隔. 来 看看例子的代码吧. 

以下为引用的内容:  <%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit 'Good coding technique
'Establish connection to DB
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=Northwind;"
'Create a recordset
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM table1", conn
'Store our one big string
Dim strTable
strTable = rs.GetString(,,"</td ><td >","</td ></tr ><tr ><td >"
," ")
%>
<HTML>
<BODY>
<TABLE>
<TR ><TD>
<% Response.Write(strTable) %>
</TR ></TD>
</TABLE>
</BODY>
</HTML>
<%
'Cleanup!
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>

strTable字符串用于存放我们从"SELECT * FROM table1"结果生成的HTML表格的代码. 
HTML表格的每列之间都将有</td ><td >的HTML代码,每行之间的HTML代码是</td ></td ><tr ><td >. GetString方法将输出正确的HTML代码并存放在strTable中,这样我们只需一行Response.Write便可以输出数据集中的所有记录. 让我们来看个简单的例 子,假设我们的查询结果返回了以下的行和列: 

以下为引用的内容:  Col1 Col2 Col3
Row1 Bob Smith 40
Row1 Ed Frank 43
Row1 Sue Void 42

那么GetString语句返回的字符串将是: 

以下为引用的内容: Bob</td ><td >Smith</td ><td >40</td ><td ></td ></tr ><tr ><
td
>Ed ...


说实话,这个字符串看上去冗长而杂乱,但它就是我们想要的HTML代码. (注意看,我们在 手工书写的HTML代码中,将<TABLE ><TR ><TD >放在Response.Write的前面,将</TD ></TR ></TABLE >放在它的后面. 这是因为我们的格式化字符串中并不含有这些表格 头尾所需的字符串.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值