自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET查詢(xún)分頁(yè)技術(shù):實(shí)現(xiàn)Web數(shù)據(jù)分頁(yè)瀏覽

開(kāi)發(fā) 后端
通過(guò)ASP.NET查詢(xún)分頁(yè)技術(shù)可將其按照一定規(guī)則分成多頁(yè)進(jìn)行顯示,每頁(yè)顯示一定數(shù)目記錄。應(yīng)用數(shù)據(jù)記錄分頁(yè)技術(shù),可以提高數(shù)據(jù)的查詢(xún)性能及頁(yè)面的顯示速度,減輕數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān)。

利用ASP.NET開(kāi)發(fā)Web數(shù)據(jù)庫(kù)的查詢(xún)功能模塊時(shí),為了減少網(wǎng)絡(luò)流量,提高頁(yè)面的訪(fǎng)問(wèn)速度,一般不會(huì)將所有的查詢(xún)結(jié)果完全在一頁(yè)中顯示出來(lái),而是將其按照一定規(guī)則分成多頁(yè)進(jìn)行顯示,每頁(yè)顯示一定數(shù)目記錄。應(yīng)用數(shù)據(jù)記錄分頁(yè)技術(shù),可以提高數(shù)據(jù)的查詢(xún)性能及頁(yè)面的顯示速度,減輕數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān)。


1 ASP.NET查詢(xún)分頁(yè)技術(shù)概述
 對(duì)Web數(shù)據(jù)庫(kù)查詢(xún)結(jié)果進(jìn)行分頁(yè)顯示主要有兩種實(shí)現(xiàn)方式,分別是瀏覽器端分頁(yè)和服務(wù)器端分頁(yè)。瀏覽器端分頁(yè)是先將數(shù)據(jù)庫(kù)中所有滿(mǎn)足查詢(xún)條件的記錄一次性保存下來(lái),然后通過(guò)設(shè)置每頁(yè)要顯示的記錄數(shù),再確定要顯示記錄的起點(diǎn)和終點(diǎn)來(lái)實(shí)現(xiàn)分頁(yè)顯示。服務(wù)器端分頁(yè)是根據(jù)用戶(hù)的請(qǐng)求,每次分別從滿(mǎn)足查詢(xún)條件的記錄中將規(guī)定數(shù)目的記錄數(shù)作讀取并顯示出來(lái)。
 為此,我們采用服務(wù)器端分頁(yè)的方式。在瀏覽器端進(jìn)行分頁(yè)時(shí),為了減少網(wǎng)絡(luò)的流量,我們采用SQL Server的存儲(chǔ)過(guò)程進(jìn)行分頁(yè)。


2  主要技術(shù)
ADO.NET類(lèi)
在Web應(yīng)用系統(tǒng)中,ASP.NET使用ADO.NET將系統(tǒng)前端的Web瀏覽器和后臺(tái)的數(shù)據(jù)庫(kù)之間聯(lián)系起來(lái)。ADO.NET是.NET Framework提供的一系列類(lèi),提供了對(duì)關(guān)系數(shù)據(jù)、XML和應(yīng)用程序數(shù)據(jù)的訪(fǎng)問(wèn)。

3  ASP.NET查詢(xún)分頁(yè)技術(shù)的實(shí)現(xiàn)
 在此,我們使用System.data.SqlClient(包含訪(fǎng)問(wèn)SQL Server數(shù)據(jù)庫(kù)的類(lèi))對(duì)MS SQL Server2000進(jìn)行操作,使用ASP.NET中的C#語(yǔ)言進(jìn)行描述。以筆者開(kāi)發(fā)的“在線(xiàn)考試系統(tǒng)”中的“查看學(xué)生留言信息模塊”為例來(lái)說(shuō)明該項(xiàng)技術(shù)的開(kāi)發(fā)過(guò)程。

3.1連接數(shù)據(jù)庫(kù)
 要訪(fǎng)問(wèn)數(shù)據(jù),必須首先連接數(shù)據(jù)庫(kù),在此我們利用System.data.SqlClient.SqlConnection類(lèi)來(lái)連接SQL Server中Student的數(shù)據(jù)庫(kù)。用到主要屬性和方法如下:
 
ConnectionString
 獲取或設(shè)置用于打開(kāi)SQL Server數(shù)據(jù)庫(kù)的字符串
 
Open
 使用ConnectionString所指定的屬性設(shè)置打開(kāi)數(shù)據(jù)庫(kù)連接
 
Close
 關(guān)閉與數(shù)據(jù)庫(kù)的連接

連接字符串如下:

  1. SqlConnection SCN = new SqlConnection("server=;database=BSNetExam;uid=sa;pwd=");   

3.2 存儲(chǔ)過(guò)程的建立

  1. CREATE PROCEDURE PageCut     
  2.     
  3.     @PageSize int=10 , -- 頁(yè)面大小     
  4.     
  5.     @PageIndex int=1  --當(dāng)前頁(yè)數(shù)     
  6.     
  7. AS    
  8.     
  9.     declare  @strSQL varchar(500)     
  10.     
  11.     if @PageIndex=1     
  12.     
  13.         set  @strSQL='select top'+str(@PageSize)+'* from tdbLevMess order by rqsj'    
  14.     
  15.     else      
  16.     
  17.         set  @strSQL='select top'+str(@PageSize)+'  * from tdbLevMess where rqsj not in    
  18.     
  19.         (select top  '+str((@PageIndex-1)*@PageSize)+'  rqsj from tdbpres)  order by rqsj'      
  20.     
  21.     exec(@strSQL)     
  22.     
  23. GO   

3.3操作數(shù)據(jù)庫(kù)

查詢(xún)數(shù)據(jù)操作可以通過(guò)多種方式來(lái)實(shí)現(xiàn),常用的對(duì)象包括SqlCommand對(duì)象(表示一個(gè)SQL查詢(xún)或者一個(gè)存儲(chǔ)過(guò)程)和SqlDataAdpater對(duì)象(把一個(gè)SqlCommand提交給SQL Server數(shù)據(jù)庫(kù))。在此,我們使用SqlCommand對(duì)象來(lái)操作數(shù)據(jù)庫(kù)。

SqlCommand類(lèi)位于System.Data.SqlClient空間中,表示要對(duì)SQL Server數(shù)據(jù)庫(kù)執(zhí)行的一個(gè)Transact-SQL語(yǔ)句或存儲(chǔ)過(guò)程。本例中用到的屬性和方法如下:


CommandText
 獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的 Transact-SQL 語(yǔ)句或存儲(chǔ)過(guò)程。
 
CommandType
 獲取或設(shè)置一個(gè)值,該值指示如何解釋 CommandText 屬性。
 
Connection
 獲取或設(shè)置 SqlCommand 的此實(shí)例使用的 SqlConnection。
 
Parameters
 獲取 SqlParameterCollection。
 
ExecuteReader
 將 CommandText 發(fā)送到 Connection 并生成一個(gè) SqlDataReader。
 

SqlParameter類(lèi)位于System.Data.SqlClient空間中,表示 SqlCommand 的參數(shù),也可以是它到 DataSet 列的映射。本例中用到的Value屬性(獲取或設(shè)置該參數(shù)的值)。

其實(shí)現(xiàn)程序如下:

  1. SqlCommand SCM=new SqlCommand();  //定義SqlCommand類(lèi)     
  2.     
  3. SqlDataReader SDR;  //定義SqlDataReader類(lèi)     
  4.     
  5. private void GridView_Init(int PageSize,int PageIndex)     
  6.     
  7. {     
  8.     
  9.     SCN.Open(); //打開(kāi)數(shù)據(jù)庫(kù)連接     
  10.     
  11.     SCM.Connection = SCN;     
  12.     
  13.     SCM.CommandText = "pagecut"; //執(zhí)行存儲(chǔ)過(guò)程     
  14.     
  15.     SCM.CommandType = CommandType.StoredProcedure;     
  16.     
  17.     SqlParameter[] pares ={ new SqlParameter("@PageSize",SqlDbType.Int),     
  18.     
  19.     new SqlParameter("@PageIndex",SqlDbType.Int)};     
  20.     
  21.     pares[0].Value = PageSize;     
  22.     
  23.     pares[1].Value = PageIndex;     
  24.     
  25.     SCM.Parameters.Clear(); //清空參數(shù)     
  26.     
  27.     foreach (SqlParameter parameter in pares)     
  28.     
  29.     {     
  30.     
  31.         SCM.Parameters.Add(parameter);     
  32.     
  33.     }     
  34.     
  35.     SDR = SCM.ExecuteReader(); //執(zhí)行存儲(chǔ)過(guò)程     
  36.     
  37.     GridView1.DataSource = SDR;  //定義GridView的數(shù)據(jù)源     
  38.     
  39.     GridView1.DataBind(); // GridView數(shù)據(jù)源綁定     
  40.     
  41.     SCN.Close(); //關(guān)閉連接     
  42.     
  43. }   

3.4 程序的實(shí)現(xiàn)

    在Web窗體上,添加一個(gè)GridView控件(用于數(shù)據(jù)的顯示),四個(gè)LinkButton(用作超級(jí)鏈接,分別為首頁(yè)、上一頁(yè)、下一頁(yè)、末頁(yè)),一個(gè)Label控件。將GridView控件的AllowPaging(是否在GridView中打開(kāi)分頁(yè)功能)屬性設(shè)置為False。我們利用Session對(duì)象保存分頁(yè)程序中的參數(shù)。具體程序如下:

  1. protected void Page_Load(object sender, EventArgs e)     
  2.     
  3.     {//頁(yè)面初始化     
  4.     
  5.         if (!IsPostBack)  //如果頁(yè)面不是***次加載     
  6.     
  7.         {     
  8.     
  9.             int PageCount,PageIndex,PageSize; //定義頁(yè)面總數(shù)、當(dāng)前頁(yè)面號(hào)、每頁(yè)記錄數(shù)     
  10.     
  11.             SCN.Open();     
  12.     
  13.             SCM.CommandText = "select count(*) from tdbLevMess ";     
  14.     
  15.             SCM.Connection = SCN;     
  16.     
  17.             int ReCount = Convert.ToInt32(SCM.ExecuteScalar().ToString());//數(shù)據(jù)集記錄總數(shù)     
  18.     
  19.             SCN.Close();     
  20.     
  21.             Session.Add("PageSize", 20); //為共享變量每頁(yè)記錄數(shù)PageSize賦值     
  22.     
  23.             PageSize = Convert.ToInt16(Session["PageSize"]);//每頁(yè)記錄數(shù)為20     
  24.     
  25.             PageCount=ReCount % PageSize == 0? ReCount / PageSize: ReCount / PageSize + 1;//計(jì)算頁(yè)面的總頁(yè)數(shù)     
  26.     
  27.             Session.Add("PageCount", PageCount); //為共享變量總頁(yè)數(shù)PageCount賦值     
  28.     
  29.             PageIndex = 1;     
  30.     
  31.             Session.Add("PageIndex", PageIndex); //為共享變量總頁(yè)數(shù)PageIndex賦值     
  32.     
  33.             GridView_Init (PageSize, PageIndex); //調(diào)用過(guò)程為GridView填充數(shù)據(jù)     
  34.     
  35.             LinkButton1.Enabled = falseLinkButton2.Enabled = false;     
  36.     
  37.             LinkButton3.Enabled = true,LinkButton4.Enabled = true;     
  38.     
  39.             Label1.Text = "第"+PageIndex.ToString() + "頁(yè)/共" + PageCount.ToString() + "頁(yè)";     
  40.     
  41.         }     
  42.     
  43.     }     
  44.     
  45.   protected void LinkButton2_Click(object sender, EventArgs e)     
  46.     
  47.     {//上一頁(yè)按鈕     
  48.     
  49.         int PageIndex = Convert.ToInt16( Session["PageIndex"] )- 1;     
  50.     
  51.         int PageCount = Convert.ToInt16( Session["PageCount"]);     
  52.     
  53.         Session.Add("PageIndex", PageIndex);     
  54.     
  55.         int PageSize = Convert.ToInt16(Session["PageSize"]);     
  56.     
  57.         if (PageIndex <  = 1)     
  58.     
  59.         {     
  60.     
  61.             LinkButton1.Enabled = false;     
  62.     
  63.             LinkButton2.Enabled = false;     
  64.     
  65.         }     
  66.     
  67.         LinkButton3.Enabled = true;     
  68.     
  69.         LinkButton4.Enabled = true;     
  70.     
  71.         GridView_Init(PageSize, PageIndex);     
  72.     
  73.         Label1.Text = "第" + PageIndex.ToString() + "頁(yè)/共" + PageCount.ToString() + "頁(yè)";     
  74.     
  75.     }  

我們只給出了LinkButton2的代碼(實(shí)現(xiàn)向上翻頁(yè)),其它超級(jí)鏈接代碼跟此相類(lèi)似。

 4   結(jié)束語(yǔ)

ASP.NET查詢(xún)分頁(yè)技術(shù)是Web應(yīng)用系統(tǒng)開(kāi)發(fā)中經(jīng)常遇到的重要工作,選擇一種高效的查詢(xún)分頁(yè)技術(shù),不僅能大大提高響應(yīng)速度,而且能提高整個(gè)系統(tǒng)性能,節(jié)約服務(wù)器寶貴資源。

【編輯推薦】

  1. 介紹ASP.NET頁(yè)面生命周期
  2. ASP.NET數(shù)據(jù)驗(yàn)證技術(shù)研究詳解
  3. ASP.NET數(shù)據(jù)驗(yàn)證中的驗(yàn)證組淺析
  4. ASP.NET數(shù)據(jù)驗(yàn)證控件使用淺析
  5. ASP.NET數(shù)據(jù)驗(yàn)證五大常用控件淺析
責(zé)任編輯:周立方 來(lái)源: 唔愛(ài)吃蘋(píng)果
相關(guān)推薦

2010-03-19 09:17:16

ASP.NET MVC

2009-07-22 16:02:39

ASP.NET MVCPagedList

2012-04-23 15:10:18

ASP.NET

2009-07-28 14:47:18

ASP.NET MVC

2009-11-06 09:23:41

ASP.NET高效分頁(yè)

2009-09-10 09:50:47

ASP.NET MVC

2012-04-13 10:05:24

ASP.NET

2009-08-12 18:19:46

ASP.NET報(bào)表打印

2009-08-12 14:10:37

asp.net分頁(yè)代碼

2009-08-14 13:20:29

ASP.NET Gri

2009-08-14 13:37:25

ASP.NET靜態(tài)頁(yè)面

2009-08-04 14:36:00

ASP.NET分頁(yè)管理

2011-04-29 13:23:11

分頁(yè)數(shù)據(jù)存儲(chǔ)

2010-08-02 09:18:39

ASP.NET MVC

2010-01-26 13:15:42

ASP.NET MVC

2009-08-12 14:38:05

ASP.NET Dat

2015-08-19 14:18:56

SQLasp.net后臺(tái)調(diào)用

2012-09-25 09:31:58

ASP.NETC#Web

2009-04-09 09:51:09

ASP.NETSQL Server 自定義分頁(yè)

2009-07-30 11:39:04

ASP.NET新技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)