ADO如何善用RecordSet组件呢?
ADO如何善用RecordSet组件呢?,ADO如何善用RecordSet组件呢?
Filter屬性:於ReecordSet設定搜尋過濾的條件,只顯示合乎條件的資料。
Clone方法:複製一份RecordSet。
CacheSize屬性:設定或得知RecordSet暫存(cache)於記憶體的的記錄筆數。
Filter屬性
經由SELECT等指令將查詢存放到RecordSet的記錄,仍然可以於RecordSet中再設定搜尋過濾的條件,方法為使用Filter屬性。
Filter屬性,於ReecordSet設定搜尋的過濾條件,只顯示合乎條件的資料。
讓我們看一個於ASP程式碼當中使用Filter屬性的例子。
譬如ASP程式碼rs19.asp如下,Filter設定為rs2.Filter = "出版='松崗'",表示只要搜尋 [出版] 欄位為 [松崗] 的記錄:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT * From 著作"
rs2.Open SqlStr,conn1,1,1
rs2.Filter = "出版='松崗'"
%
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0
<TR
<TD ALIGN=CENTER BGCOLOR="#008080"<FONT COLOR="#FFFFFF"書名</FONT</TD
<TD ALIGN=CENTER BGCOLOR="#008080"<FONT COLOR="#FFFFFF"出版</FONT</TD
<TD ALIGN=CENTER BGCOLOR="#008080"<FONT COLOR="#FFFFFF"圖片</FONT</TD
<TD ALIGN=CENTER BGCOLOR="#008080"<FONT COLOR="#FFFFFF"簡介</FONT</TD
<% Do while not rs2.EOF %
<TR
<TD BGCOLOR="f7efde" ALIGN=CENTER<%= rs2("書名") %</TD
<TD BGCOLOR="f7efde" ALIGN=CENTER<%= rs2("出版") %</TD
<TD BGCOLOR="f7efde" ALIGN=CENTER<%= rs2("圖片") %</TD
<TD BGCOLOR="f7efde" ALIGN=CENTER<%= rs2("簡介") %</TD
</TR
<% rs2.MoveNext %
<% Loop %
</TABLE
<% rs2.Close %
以上的 ASP程式碼rs19.asp,於用戶端使用瀏覽器,瀏覽執行的結果,顯示過濾後的結果,只顯示合乎條件的資料。
CacheSize屬性
CacheSize屬性,設定或得知RecordSet暫存(cache)於記憶體的的記錄筆數,預設值為1。
譬如您若將CacheSize設定為10時,ADO首先將前10筆的記錄暫存(cache)放到本機記憶體緩衝器(local memory buffer)當中,一旦您移動到最末的第10筆記錄時,ADO暫存(cache)第二個10筆記錄。
若要更新暫存(cache)的記錄,可使用Resync方法。
讓我們看一個於ASP程式碼當中使用CacheSize的例子。
譬如ASP程式碼rs18.asp如下,這個例子將產品資料表的資料由第一筆逐一移動到最末筆,總計循環做了100次,計算總共花了多少時間,比較有和沒有設定CacheSize的執行效能差別:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT * From 產品"
rs2.Open SqlStr,conn1,1,1
t1 = Timer
For i = 1 to 100
rs2.MoveFirst
Do while not rs2.EOF
A = rs2(0)
rs2.MoveNext
Loop
Next
t2 = Timer
Response.Write "<BR無設CacheSize: " & CINT(t2 - t1)
rs2.MoveFirst
rs2.CacheSize = 10
t2 = Timer
For i = 1 to 100
rs2.MoveFirst
Do while not rs2.EOF
A = rs2(0)
rs2.MoveNext
Loop
Next
t2 = Timer
Response.Write "<BR有設CacheSize: " & CINT(t2 - t1)
%
<% rs2.Close %
由本例,未設定CacheSize,花了6秒時間就完成。將CacheSize設定為10時,反而花了9秒時間才完成。可見CacheSize須小心使用,否則將影響執行