精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

東坡下載:內(nèi)容最豐富最安全的下載站!

首頁最新資訊 → 通過ASP記錄進行分頁的完美解決方案

通過ASP記錄進行分頁的完美解決方案

相關(guān)文章發(fā)表評論 來源:本站時間:2011/6/15 15:45:39字體大小:A-A+

作者:點擊:554次評論:0次標(biāo)簽:

 這篇文章將給大家分享介紹到通過ASP記錄進行分頁的完美解決方案,希望能給大家?guī)韼椭騿l(fā)。

簡介

  在 Active Server Pages (ASP) 應(yīng)用程序中顯示大型記錄集,很可能是您熟悉的一個問題。本文對此問題及其解決方案和示例代碼進行了深入探討,這個示例代碼經(jīng)過簡單修改,就可以應(yīng)用于您的具體情況。該示例代碼被設(shè)計成服務(wù)器端的解決方案,它與瀏覽器無關(guān)。另外,我會指出您在設(shè)計自己的解決方案時需要考慮的問題。

  問題

  您的查詢返回了一個大型記錄集。需要提供一個簡便方法來瀏覽這些結(jié)果,即在每頁上只顯示結(jié)果的子集。要有效的完成此項工作,需要對 ActiveX(R) 數(shù)據(jù)對象 (ADO) 和數(shù)據(jù)庫如何協(xié)同工作有深入的了解。

  解決方案

  如何將您的記錄集分成“頁”,而不用大型的結(jié)果?所謂頁,基本上就是您指定應(yīng)當(dāng)顯示在一起的許多記錄。例如,如果您的記錄集中有 100 條記錄,可能每頁顯示 10 條記錄。

  ADO 提供了兩種方法,PageSize 和 AbsolutePage。這些方法使您能夠指定每頁要顯示的記錄數(shù),以及將游標(biāo)定位于一頁的開始。

  打開記錄集之后,基本步驟就是:

  為該記錄集指定 PageSize。它表示每頁要顯示的記錄數(shù)。

  指定該記錄集的 AbsolutePage。這將記錄指針移到頁的序列中,給定頁的開始處。

  顯示記錄頁。要完成這一步,您要用設(shè)置的 PageSize 次數(shù)循環(huán)整個記錄集,或者直到到達文件的末尾。

  示例代碼

  下列示例代碼說明了頁面建立過程。借助它,您可以建立自己的解決方案的原型。在您自己的代碼中,確保要完成下列步驟:

  添加錯誤處理。

  添加對查詢返回的記錄數(shù)的限制。

  用條件過濾記錄。(如,建立 WHERE 子句)。

  使用存儲過程或視圖。

  一定要通過更改連接字符串和 SQL 語句來修改我的示例代碼,以指向您的數(shù)據(jù)庫。由于代碼使用 ADO 常數(shù),如 adUserServer,一定要在您的 Global.asa 文件中引用 ADO TypeLibrary,或在 ASP 頁中包括 ADOVBS.INC 文件。請注意,在將項目引用設(shè)置為 Microsoft ADO 時,Visual InterDev(R) 會為您自動生成 TypeLibrary 引用。

  注意該示例有兩種方法可以提供導(dǎo)航欄:

  ShowNavBar。 它為用戶提供了帶著記錄計數(shù)一起跳到指定頁的方法。為實現(xiàn)這一步,它使用了 RecordCount 和 PageCount 屬性。

  ShowNavBarFast。 該方法不提供跳轉(zhuǎn)到指定頁的能力,也不提供記錄計數(shù),但可以通過 CacheSize 屬性控制取回的記錄數(shù)。

  PageThroughRs.Asp

<%@ Language=VBScript %>
<% Option Explicit %>
<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
  '確保引用 ADO Typelib 或使用 ADOVBS.Inc
  Dim iPageNum, iRowsPerPage

  Main
    Sub Main()
   Dim rst
   Dim sSQL, sConnString

   If Request.QueryString("iPageNum") = "" Then
     iPageNum = 1
   Else
     iPageNum = Request.QueryString("iPageNum")
     iPageNum = CInt(iPageNum)
   End If

   iRowsPerPage = 10


   sConnString = "Provider=SQLOLEDB.1;password=Xyz123;user id=WebUser;" & _
         "Initial Catalog=NorthWind;Data Source=MySQLServer;" & _
         "network=dbmssocn;"

   '下列 SQL 從 SQL 視圖中檢索所有列。
   '要優(yōu)化性能:
   '- 使用存儲過程、視圖或在 SELECT 中指定列
   '- 使用限制返回的記錄的條件(例如,WHERE 子句)
   sSQL = "SELECT CategoryName, ProductName, QuantityPerUnit,"
   sSQL = sSQL & "UnitsInStock, Discontinued"
      sSQL = sSQL & " FROM [Products By Category]"

   Set rst = GetRecords(sConnString, sSQL)

   WriteTableHeader rst
   WriteTableBody rst, iRowsPerPage, iPageNum
   ShowNavBar rst

   'ShowFastNavBar 方法不使用 RecordCount
   '或 PageCount,所以它重試的記錄數(shù)僅等于
   '記錄集的 CacheSize 指定的數(shù)量。

   'ShowFastNavBar rst

   CleanUp rst
  End Sub

  Function GetRecords(sConnString, sSQL)
  Dim cnn
  Dim rst

    set cnn = Server.CreateObject("ADODB.CONNECTION")
    cnn.ConnectionString = sConnString
    nn.Open

    Set rst = Server.CreateObject("ADODB.RECORDSET")

    Set rst.ActiveConnection = cnn

     '當(dāng)記錄集打開時,adUseClient 的 CursorLocation
     ' 將檢索所有的記錄。
     'adUseServer 允許沿用 CacheSize
     rst.CursorLocation = adUseServer

     '在使用服務(wù)器端游標(biāo)時,CacheSize 
     '限制了取回的行數(shù)。我們將只抓取正在顯示的
     '的記錄的數(shù)目 - iRowsPerPage
     rst.CacheSize = iRowsPerPage

     rst.Open sSQL,,adOpenStatic, adLockReadOnly牋?
     Set GetRecords = rst
    end Function

    Sub WriteTableHeader(rst)
    Dim fld

     Response.Write "<TABLE WIDTH=80% BORDER=1>"
     Response.Write "<TR>"

     '建立表的列標(biāo)題
      For Each fld in rst.Fields
       Response.Write "<TD><B>" & fld.Name & "</B></TD>"
    Next
    Response.Write "</TR>"
   End Sub

   Sub WriteTableBody(rst, iRowsPerPage, iPageNum)
   Dim iLoop
   Dim fld

   iLoop = 1

   rst.PageSize = iRowsPerPage
   rst.AbsolutePage = iPageNum

   '寫出記錄的當(dāng)前頁
   Do While (Not rst.EOF) and (iLoop <= iRowsPerPage)
     Response.Write "<TR>"
      For Each fld in rst.Fields
       Response.Write "<TD>" & fld.value & "</TD>"
        Next
         iLoop = iLoop + 1
         rst.MoveNext
         Response.Write "</TR>"
     Loop
     Response.Write "</TABLE>"
   End Sub

   Sub ShowNavBar(rst)
   Dim iPageCount
   Dim iLoop
   Dim sScriptName

    '本版本提供了更豐富的用戶導(dǎo)航,但是
    '依賴于 RecordCount 和 PageCount,
    '它抵消了為服務(wù)器端游標(biāo)
    '指定 CacheSize 的好處。

    Response.Write "<BR><BR>"
    sScriptName = Request.ServerVariables("SCRIPT_NAME")

    If iPageNum > 1 Then
      Response.Write " <a href=" & sScriptName & "?iPageNum="
      Response.Write (iPageNum -1) & "><< Previous</a>"
    End If

    iPageCount = rst.PageCount
    Do Until iLoop > iPageCount
    f iLoop = iPageNum Then
       Response.Write " <B>" & CStr(iLoop) & "</B>"
      Else
       Response.Write " <a href=" & sScriptName & "?iPageNum=" & _
       Cstr(iLoop) & ">" & iLoop & "</a>"
       End If
       iLoop = iLoop + 1
    Loop

    If Not rst.EOF Then
     Response.Write " <a href=" & sScriptName & "?iPageNum="
     Response.Write (iPageNum +1) & "> Next >></a><BR>"
    Else
       Response.Write "<BR>"
    End If

    Response.Write "Page " & iPageNum & " of " & iPageCount & "<BR>"
    Response.Write rst.RecordCount & " Records" 牋?
   End Sub

   Sub ShowFastNavBar(rst)
   Dim iPageCount
   Dim iLoop
   Dim sScriptName

     '在指定 CacheSize 和使用服務(wù)器端游標(biāo)時,
     '該方法特別有效,因為它不使用 RecordCount
     '和 PageCount。需要用戶具有經(jīng)驗。

     Response.Write "<BR><BR>"
     sScriptName = Request.ServerVariables("SCRIPT_NAME")

     If iPageNum > 1 Then
      Response.Write " <a href=" & sScriptName & "?iPageNum="
      Response.Write (iPageNum -1) & "><< Previous</a>"
    End If

    If Not rst.EOF Then
      Response.Write " <a href=" & sScriptName & "?iPageNum="
      Response.Write (iPageNum +1) & "> Next >></a><BR>"
    Else
      Response.Write "<BR>"
    End If

    Response.Write "Page " & iPageNum

   End Sub

   Sub CleanUp(rst)
     If Not rst Is Nothing then
       If rst.state = adStateOpen then rst.close
       set rst = nothing
     End If
   End Sub

</SCRIPT>

  分析

  設(shè)計分頁解決方案時,需注意的幾個問題:

  游標(biāo)定位問題。如果使用客戶端游標(biāo),每次打開記錄集時,將讀取所有的記錄。因此,由于讀取了所有的記錄,以后訪問 RecordCount 或 PageCount 屬性時將很快。如果您使用服務(wù)器端游標(biāo),將只檢索需要的記錄。您可以通過 CacheSize 屬性指定一次要讀取的記錄數(shù)來提高性能。然而,如果您使用服務(wù)器端游標(biāo),和 RecordCount 或 PageCount 屬性,則將讀取所有的記錄,性能得不到提高。必須在具有更多信息和更豐富導(dǎo)航的用戶界面,與檢索所有記錄的性能影響之間折衷。使用服務(wù)器端游標(biāo)時,CursorType 屬性必須是 adOpenStatic 或 adOpenKeyset,才能使用分頁。分頁并非總是最好的用戶頁面。它可能僅適用于用戶正從搜索引擎掃描結(jié)果或瀏覽產(chǎn)品目錄的情況。

  試將記錄分類,以使更相關(guān)的記錄出現(xiàn)在前幾頁中(例如,使用 SQL 的 ORDER BY 子句)。用戶所能做的就這么多。

  只檢索需要顯示的列(即,避免 SELECT *)。

  只檢索需要顯示的記錄。確保過濾的條件(即,使用 WHERE 子句)。

  以下是需要牢記的幾點提示:

  將您的邏輯封裝在方法中。使用方法可將表示邏輯和數(shù)據(jù)訪問邏輯分離,這就簡化了將代碼裝入 Windows 腳本組件、Visual Basic 腳本編輯 (VBScript) 類或組件的工作。改變功能更容易了,代碼維護也得以改進。測試和調(diào)試也因可以注釋和取消注釋方法調(diào)用而得到改進。

  與包括 ADOVBS.INC 相比,引用 ADO 的 TypeLibrary 是更好的解決方案。這是因為 ASP 在處理包含文件時,是將整個文件讀入內(nèi)存,而不是只讀入它需要的部分。

  結(jié)論

  分頁是一項通用技術(shù),許多 Web 應(yīng)用程序用它來提供瀏覽大量記錄的好方法。在設(shè)計分頁解決方案時,需要考慮一些問題,如,如何檢索記錄,需要提供什么類型的用戶導(dǎo)航。盡管最好的解決方案取決于您的具體的應(yīng)用程序,使用本文中的技術(shù)將幫助您作出更好的設(shè)計決策。

相關(guān)評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)

本類常用軟件

主站蜘蛛池模板: 国产成人精品一区二区三区… | 国产男人天堂 | 久久久久久久久久免观看 | 国产高清a毛片在线看 | 99热3| 久久99精品久久久久久野外 | 婷五月综合 | 久草国产在线观看 | 国产精品久久国产精品99 | 男女下面一进一出视频在线观看 | 国产美女视频网站 | run away全集未删减动漫 | 98色花堂永久地址国产精品 | 国产免费高清在线精品一区 | 免费在线观看黄色小视频 | 国产清纯白嫩大学生正在播放 | 亚洲精品国产成人7777 | 国产国产在线播放你懂的 | 国产精品日韩 | 国内精品久久久久久野外 | 狠狠躁天天躁 | 国产不卡免费 | 久久婷婷国产综合精品青草 | 91久久精品国产免费一区 | 国产成人综合在线视频 | www.加勒比.com | 日本精品久久久久久久久免费 | 久久夜色精品 | 一级毛片免费在线观看网站 | 欧美一级高清片欧美国产欧美 | 可以免费看的毛片 | 99在线观看视频免费 | 永久在线毛片免费观看 | 色婷婷中文字幕在线一区天堂 | 国产成人精品视频一区 | 国产精品久久国产精品99盘 | 夜夜夜久久久 | 国产在线免 | 久久久精品中文字幕 | 99久久精品自在自看国产 | 国产日韩欧美中文字幕 |