<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在ASP中改善動態分頁的性能

      [摘要]原作:張立鋒 張 禾 概 述 現在有不少介紹利用ASP實現動態分頁的文章,方法大同小異,就是每次利用ADO返回原始數據滿足條件記錄集中的指定頁。但在實際工程應用中,原始數據量通常很大,原始數據的加工比較慢,如果每次換頁原始數據都要加工一次,則會嚴重影響應用程序運行的性能。 解決上述問題主要有兩...
      原作:張立鋒 張 禾

      概 述  
      現在有不少介紹利用ASP實現動態分頁的文章,方法大同小異,就是每次利用ADO返回原始數據滿足條件記錄集中的指定頁。但在實際工程應用中,原始數據量通常很大,原始數據的加工比較慢,如果每次換頁原始數據都要加工一次,則會嚴重影響應用程序運行的性能。  
      解決上述問題主要有兩種途徑:一種途徑是將查詢條件相對固定,利用相對固定的查詢條件對原始數據進行加工,生成一個小數據量的中間庫,每次查詢都對中間庫進行操作。這樣雖然會提高程序的性能,但會影響程序的靈活性,而且 Server端還需定時對原始數據進行加工維護。另一個途徑是在Server端保存查詢的結果。這樣雖然不能改善查詢的性能,但Client端換頁時Server端能夠很快響應。第一種途徑的實現比較簡單,本文介紹第二種途徑的實現方法。  

      實現方法  
      將Server端的查詢結果保存在一個動態數組中,即在 Session_OnStart過程中聲明一個二維的動態數組。當Server端收到Client端提交的申請后,首先判斷申請是條件查詢還是換頁,如是條件查詢則判別查詢條件是否與上次提交的查詢條件不同,如不同則執行查詢,將查詢結果保存在該數組中,然后向Client端返回第一頁的內容,否則直接從該數組中返回相應頁的內容。  
      程序實現  
      1.定義二維數組及其他變量  
      Sub Session_OnStart
      dim TempDb()  
      redim Preserve TempDb(1,2)  
      session(“StoredArray") = TempDb  
      ’定義一個Session數組
      session(“iPageCount")=0
      session(“iPageNo")=0
      ......
      End Sub

      2.調用存儲過程返回數據  

      Sub GetRecordSet(strBbmc,strKssj ,
      strZzsj ,strNodeCode ,strFxzl )
      '參數為報表名稱和各個限制條件
      select case strBbmc
      case “交易匯總表"
      strCnn=“PROVIDER=MSDASQL;dsn=sqldb;
      uid=sa;pwd=123456;database=vlog;"
      Set objcnn=Server.CreateObje(“ADODB.Connection")
      objcnn.CommandTimeout = 9999999
      objcnn.ConnectionTimeout = 99999999
      objcnn.CursorLocation = adUseClient
      objcnn.Open strCnn '打開連接  
      Set objRs =Server.CreateObject
      (“ADODB.Recordset")  
      objRS.PageSize = iPageSize
      objRS.CacheSize = iPageSize
      objRs.Open “sszhatmlog ‘“ & strKssj & "' ,
      ‘“ & strZzsj & "', ‘“ & strNodeCode & "' ,
      ‘“ & strFxzl & "'",objcnn,adOpenStatic ,
      adLockReadOnly,1
      ’執行存儲過程返回查詢結果
      ......
      End Sub  

      3.將查詢結果保存到動態數組  

      Sub SaveRecordSet()  
      if objRs.EOF = false then
      objRs.movelast
      session(“iRowCount") = objRs.recordCount
      session(“iFieldCount") = objRs.Fields.Count
      session(“iPageCount") = objRs.pagecount
      redim Preserve TempArray(session
      (“iRowCount"),session(“iFieldCount"))  
      ’TempArray是一個二維動態數組,  
      根據記錄集大小重新定義其大小
      objRs.MoveFirst
      iCount=0  
      do while objRs.EOF=false
      iCount = iCount + 1  
      for i= 1 to session(“iFieldCount")
      TempArray(iCount,i)=objRs.Fields.Item
      (i-1).value
      next  
      objRs.MoveNext  
      loop
      session(“StoredArray") = TempArray  
      objRs.Close  
      else
      session(“iPageCount") = 0
      end if
      End Sub

      4.顯示記錄內容  

      Sub ShowRecord()
      ......
      LocalArray=session(“StoredArray")  
      iShowTotal=(iPageCurrent-1)*iPageSize+1  
      iRowLoop = 1
      do while iRowLoop < = iPageSize and iShowTotal
      < = session(“iRowCount")
      Response.Write(“< TR >")  
      for i = 1 To session(“iFieldCount")
      Response.write(“< TD >"  
      & LocalArray(iShowTotal,i)) Next
      Response.Write(“< /TR >")  
      iShowTotal = iShowTotal + 1  
      iRowLoop = iRowLoop + 1 loop
      Response.Write(“< /TABLE >")  
      if iPageCurrent < > 1 and  
      iPageCurrent < session
      (“iPageCount") then
      % >
      < center >< A HREF=“db_pag.asp?page=< %=  
      iPageCurrent - 1 % >" >前一頁< /A >< A HREF=
      “db_pag.asp?page=< %= iPageCurrent + 1 % >" >
      后一頁< /A >< /center >  
      < %  
      else  
      if iPageCurrent < > 1 then
      % >
      < center >< A HREF=“db_pag.asp?page=< %=
      iPageCurrent - 1 % >" >前一頁 < /A >< /center >  
      < %
      end if
      if iPageCurrent < session(“iPageCount")then
      % >
      < center >< A HREF=“db_pag.asp?page=
      < %= iPageCurrent + 1 % >" >后一頁 < /A >
      < /center >
      < %
      end if
      end if
      End Sub

      5.主程序  

      if Request.QueryString(“page") = “" then  
      ’提交查詢申請并且查詢條件與上一次不同
      ......
      call GetRecordSet(strBbmc,strKssj,strZzsj,
      strNodeCode,strFxzl)  
      call SaveRecordSet  
      Else
      iPageCurrent=CInt(Request.QueryString(“page"))
      strKssj=session(“strKssj")
      end if  
      if session(“iPageCount") = 0 then  
      Response.Write “抱歉!沒有滿足條件的記錄"
      Response.Write “< Br >"
      else  
      call showrecord()  
      end if

      結束語  
      本程序的關鍵在于Session數組的定義及其賦值的實現,通過應用Session數組可以提高處理大量數據的應用程序的性能。



      日韩精品一区二区三区高清