以文本方式查看主题 - 咿思舞论坛 (http://bbs.145829.com/index.asp) -- 『网站资源』 (http://bbs.145829.com/list.asp?boardid=8) ---- ado如何善用recordset组件呢?asp技巧 (http://bbs.145829.com/dispbbs.asp?boardid=8&id=166) |
-- 作者:ysw829 -- 发布时间:2009/8/21 16:03:07 -- ado如何善用recordset组件呢?asp技巧 為了善用RecordSet物件,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須小心使用,否則將影響執行的效能。 Clone方法 Clone方法,複製一份RecordSet。 有時候想處理一下RecordSet,譬如使用如上的Filter屬性,於ReecordSet設定搜尋的過濾條件,RecordSet就被變更,此時若又想保留原RecordSet時,就可以使用Clone方法,先複製一份RecordSet,再處理複製的那一份。 讓我們看一個於ASP程式碼當中使用Clone的例子。 譬如ASP程式碼rs12.asp如下,使用Set rs1 = rs.Clone將rs 的RecordSet複製一份到rs1的RecordSet當中: <% Set conn1 = Server.CreateObject("ADODB.Connection") conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;" Set rs = Server.CreateObject("ADODB.Recordset") SqlStr = "SELECT * FROM 著作" rs.Open SqlStr,conn1,1,1 Set rs1 = rs.Clone %> <Center> <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> </TR> <% Do While Not rs1.EOF %> <TR> <TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("書名")%></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("出版")%></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("圖片")%></TD> <TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("簡介")%></TD> </TR> <% rs1.MoveNext Loop rs1.Close %> </TABLE> 以上的 ASP程式碼rs12.asp,於用戶端使用瀏覽器,瀏覽執行的結果,顯示經過複製的那一份rs1的RecordSet。 DSN data source 當我們想得知DSN data source的詳細資訊時,可以直接將連線顯示出來。 讓我們看一個於ASP程式碼當中得知DSN data source詳細資訊的例子。 譬如ASP程式碼rs11.asp如下: <% Set conn1 = Server.CreateObject("ADODB.Connection") conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;" Response.Write(conn1) %> 以上的 ASP程式碼rs11.asp,於用戶端使用瀏覽器,瀏覽執行的結果,使用Response.Write(conn1),即可顯示DSN data source的詳細資訊。 OpenSchema OpenSchema方法,可得知SQL Server某一個資料庫的資料表資訊。 讓我們看一個於ASP程式碼當中使用OpenSchema的例子,請先安裝本書所附「網站熱門應用精選」光碟片,以便自動於SQL Server建立comPak資料庫。 譬如ASP程式碼rs30.asp如下: <% Set conn1 = Server.CreateObject("ADODB.Connection") conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=comPak" set rs = conn1.OpenSchema(20) adSchemaTables Do while not rs.EOF Response.Write "<BR>" & rs("TABLE_NAME") & ": " & rs("TABLE_TYPE") rs.MoveNext Loop %> 以上的 ASP程式碼rs30.asp,於用戶端使用瀏覽器,瀏覽執行的結果,由set rs = conn1.OpenSchema(20) 取得SQL Server 的comPak資料庫的資料表資訊,其中rs("TABLE_NAME")取得資料表名稱,rs("TABLE_TYPE")取得資料表類型。 |