多重紀錄集Multiple Recordset的應用

有時候你會遇到這樣的情況,在同一網頁中的資料是來自於好幾個不同款的資料表, 因此你會爲每一個資料表開一個 Recordset ,在這一篇文章將爲你介紹另一個替代方案『多重紀錄集 (Multiple Recordsets) 』。

  什麼是 Multiple Recordsets
  什麼是 Multiple Recordsets 呢!簡單來說就是將多個 Select 指令合併爲一個,而每一個別的指令都以分號(;)隔開, 用這個指令所開啓的Recordsets 就是 Multiple Recordset!
  來看個例子,劇情如下:
  使用數據庫:SQL 內建北風數據庫
  目標:製作三個下拉式選單,分別爲「職員名單」、「產品名單」、「產品類別清單」
  你可能會爲每一個下拉式選單的創造工作各開啓一個 Recordset,相信你一定會覺得很麻煩,又浪費系統資源 現在我們就來看看如何利用 Multiple Recordset 來簡化工作
<%
'創造 Recordset 對象
Set oRs = Server.CreateObject("Adodb.Recordset")
'使用 OLEDB Provider, YourSQLServerName 請改爲你的服務器名稱
sConnString = "Provider=SQLOLEDB;" _
& "Data Source=YourSQLServerName;" _
& "Initial Catalog=northwind;" _
& "User Id=sa;Password="
'多重 Select 指令, 每個指令都以;隔開
sSQL = "select EmployeeID,FirstName from Employees " _
& "order by EmployeeID;" _
& "select ProductID,ProductName from Products " _
& "order by ProductID;" _
& "select CategoryID,CategoryName from Categories " _
& "order by CategoryID"
oRs.Open sSQL, sConnString, 0, 1
i = 1
'利用 Nothing 的特性來檢查是否到達最後的 Recordset
Do While Not (oRs is Nothing)
Response.Write "<select name='s" & i & "'>"
& vbCrLf
Response.Write "<option value='>--- 請選擇 ---" & vbCrLf
Do While Not oRs.EOF
Response.Write "<option value='" & oRs(0) & "'>"
_
& oRs(1) & vbCrLf
oRs.MoveNext
Loop
Response.Write "</select><p>" & vbCrLf
'將 Recordset 的 Pointer 向下移一位
Set oRs = oRs.NextRecordset
i = i + 1
Loop
%>
  一但我們開啓了 Multiple Recordsets,便可以存取第一個 SQL 指令字符串所傳回的結果,在外部的 Do Loop 循環中,由於 Multiple Recordsets 並沒有類似 EOF 的屬性,因此我們使用 Nothing 來判斷是否已經到達最後一個 Recordset。而內部的 Do Loop
  循環和一般 Recordset 的處理方式一樣,因此不多做說明。 當內部循環結束時,我們呼叫 NextRecordset 方法將 Multiple Recordset 的指針(Pointer)移到下一個 Recordset。

  Multiple Recordsets 的限制
  並不是在所有的數據庫或是資料提供者 (Data Provider) 你都可以使用 Multiple Recordsets, 例如,在 Oracle 數據庫你就無法使用,其實說穿了就是要用微軟的解決方案 ADO+MSSQL 纔是絕配,除此之外,也建議你使用 SQL OLEDB Provider,儘可能不要用 ODBC Driver,在某些狀況下使用 ODBC Driver 會產生不必要的錯誤!
  希望這篇文章對你有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章