<!--#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 >放在它的後面. 這是因為我們的格式化字串中並不含有這些表格 頭尾所需的字串.)
轉自:http://nyazheng.blog.163.com/blog/static/5712646520088554940528/