999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ASP.NET中數據分頁技術的研究

2007-12-31 00:00:00岳國偉梁永全陳玉娥
計算機應用研究 2007年9期

摘要:數據分頁是Web應用程序開發中經常使用的一種技術,也是提高Web數據訪問性能的主要手段。結合ASP.NET的優點,詳細分析了ASP.NET中各種數據分頁技術,并通過分析試驗結果比較了各種數據分頁技術的優缺點。

關鍵詞:ASP.NET;Web應用;數據分頁

中圖分類號:TP311.11文獻標志碼:A

文章編號:1001-3695(2007)09-0159-03

ASP.NET是微軟.NET開發平臺的核心元素,程序開發人員可以使用它構建動態Web站點、開發Web應用程序、提供基于XML的Web服務。ASP.NET 完全基于模塊和組件,具有很好的可擴展性和可定制性,可為用戶提供功能強大、外觀豐富的可編程Web頁面。

在Web開發過程中,進行數據查詢時經常會遇到這樣的情況,即一個數據庫查詢會返回太多的結果行。如果把這些數據都在一個頁面中發送給客戶端會產生下面幾個問題:

a)數據在頁面中顯示過程非常漫長,有時會造成數據的缺損、遺漏或丟失;

b)造成網絡資源的嚴重浪費,甚至會產生嚴重的網絡堵塞現象;

c)對用戶來說,等待一個漫長時間的鏈接是一種很糟糕的體驗。

針對上述問題,分頁顯示技術應運而生。數據分頁顯示技術是Web開發過程中經常使用的海量數據顯示方法,為用戶可管理的數據查詢提供了極大的方便。本文針對微軟的ASP.NET詳細介紹了Web開發中用到的各種分頁顯示方法和技巧,并給出了核心的程序代碼。

1各種技術的詳細分析與研究

本文使用ASP.NET、C #[1]、SQL Server 2000實現各種分頁過程。

1.1使用DataGrid控件分頁顯示數據

DataGrid控件是ASP.NET中功能最強大的數據控件之一,它以表格式布局顯示數據庫中的數據。DataGrid除了內建的數據表現和方法之外,還允許用戶自己定義表現形式,允許用戶分頁顯示數據。DataGrid的內建分頁方法每次請求時需要把查詢結果發送給Web服務器,Web服務器再將查詢結果發送到客戶端瀏覽器的Web頁面上。下面的代碼給出了DataGrid顯示數據的后臺代碼:

//分頁函數

private void datagrid1_Page(object sender,DataGridPageChangedEventArgs e){

DataGrid1.CurrentPageIndex=e.NewPageIndex;

DataGrid1.DataSource=GetDataview();

DataGrid1.DataBind();}

//綁定數據

private DataView GetDataview(){

string strConn=\"數據庫連接字符串...\";

string strComm=\"select * from pagerepository\";

DataView dv;

SqlConnection dbConn=newSqlConnection(strConn);

dbConn.Open();

SqlDataAdapter da=newSqlDataAdapter(strComm,dbConn);

DataSet ds=new DataSet();

da.Fill(ds);

dv=ds.Tables[0].DefaultView;

dbConn.close();

return dv;}

1.2基于ADO.NET的存儲過程分頁

ADO.NET 是專為.NET環境下的 Web應用程序而設計的關系數據存取模型,同時還能為其他應用程序結構提供較好的功能。通過支持對數據的松耦合訪問,ADO.NET 減少了與數據庫的活動連接數目(即減少了多個用戶爭用數據庫服務器上的有限資源的可能性),從而實現了最大程度的數據共享。這里也要用到DataGrid。在1.1節每次請求時都要將數據庫中的數據讀到內存中,于是,當數據量很大時,1.1節的方便性是以犧牲性能為代價的。區別于1.1節中采用普通的SQL查詢語句進行操作,這次不再將所有的結果數據讀入內存,而是借助SQL Server 2000[2,3]提供的存儲過程[4]來進行優化,每次請求只是從數據庫中取出一個頁面的數據量。通過使用存儲過程,大大提高了數據的存取速度,有效地減少了對無效數據的操作,改善了系統性能。該方法首先建立一個存儲過程,然后使用存儲過程從數據表格中查詢數據。下面的代碼給出了該方法顯示數據的過程:

//存儲過程——每次查詢一個頁面的數據

create procedure paging(@pageSize int, @CurPage int, @count int output)as

select identity(int,1,1) as ′id′,* into #temp from ageRepository

--從臨時表中檢索數據

select * from #temp

where ID>@pageSize*@CurPage and id<=@pageSize*(@CurPage+1)

drop table #temp

//綁定數據

private DataSet GetDataview(){

string strConn=\"數據庫連接字符串\";

string strComm=\"paging\";

SqlConnection dbConn=new SqlConnection(strConn);

SqlCommand dbComm=new SqlCommand(strComm, dbConn);

dbComm.CommandType =CommandType.StoredProcedure;

dbComm.Parameters.Add(\"@pageSize\",SqlDbType.Int);

dbComm.Parameters[\"@pageSize\"].Direction=ParameterDirection.Input;

dbComm.Parameters[\"@pageSize\"].Value=pageSize;

dbComm.Parameters.Add(\"@CurPage\", SqlDbType.Int);

dbComm.Parameters[\"@CurPage\"].Direction=ParameterDirection.Input;

dbComm.Parameters[\"@CurPage\"].Value=curPage;

dbComm.Parameters.Add(\"@count\", SqlDbType.Int);

dbComm.Parameters[\"@count\"].Direction=ParameterDirection.Output;

dbConn.Open();

SqlDataAdapter da=new SqlDataAdapter();

DataSet ds=new DataSet();

da.SelectCommand = dbComm;

da.Fill(ds);

dbComm.ExecuteNonQuery();

totalPages=dbComm.Parameters(\"@count\").Value/pageSize;

dbConn.Close();

return ds;

}

//DataGrid綁定數據

Private void bindingGrid(){

DataGrid1.DataSource=GetDataview();

DataGrid1.DataBind();

}

1.3使用table(表格)控件靈活分頁

有時數據庫中存放的數據類型比較復雜,如某些數據表格的字段既有文本格式又有多媒體圖片信息等。這時在頁面上顯示數據時就要考慮頁面的整體布局、圖片位置和文本內容要協調一致,達到一種好的視覺效果(圖1)。DataGrid通常只能按照一定模式進行數據顯示,對于這種頁面顯示需要靈活布局的情況顯得有些力不從心,而ASP.NET提供的表格控件正好滿足了類似的要求,能夠方便靈活地顯示數據。但是,使用表格控件時,數據翻頁需要重新設計,如可以在頁面底部綁定另一表格專門用于頁碼顯示(圖1)。頁面翻頁向服務器提交頁碼時,頁碼的傳遞方式既可以通過get方式(或稱querystring傳值)傳遞,也可以通過post方式(或稱forms傳值)傳遞[5]。

下面給出了具體的分頁顯示函數和頁碼綁定函數:

//按照頁面指定的布局顯示數據

private void DisplayResults(Table tblResult,int intPageNo,int pageSize,int totalCounts){

string strConn=\"數據庫連接字符串\";

string strComm=\"paging\";

int i=0;

TableCell cellResult;

TableRow rowResult;

SqlConnection dbConn=newSqlConnection(strConn);

SqlCommand dbComm=newSqlCommand(strComm, dbConn);

SqlDataReader dr;

dbConn.Open();

dr=dbComm.ExecuteReader();

while (dr.Read() i

if (i >= pageSize * (intPageNo-1)){

rowResult=new TableRow();

cellResult=new TableCell();

//圖片信息

TableCell cellPic;

cellPic=new TableCell();

cellPic.Text=\"圖片地址\";

//標題信息(代碼與圖片類似)

//摘要信息(代碼與圖片類似)

//附加信息(代碼與圖片類似)

rowResult.Cells.Add(cellResult);

tblResult.Rows.Add(rowResult);

}

i++;

dbConn.Close();}

//分頁綁定函數

private void BuildPageRow(Table tb,int PageNo,int pageSize,int Docs){

TableRow rowPageRow=new TableRow();

TableCell cellPageNo;

int intPageCount;

intPageCount=intDocsSet/PageSize;

if (intPageNo > 1){

cellPageNo=new TableCell();

cellPageNo.Text=\"上一頁\";

rowPageRow.Cells.Add(cellPageNo);

}

cellPageNo=new TableCell();

cellPageNo.Text=i.ToString();

rowPageRow.Cells.Add(cellPageNo);

if (intPageNo < intPageCount){

cellPageNo=new TableCell();

cellPageNo.Text = \"下一頁\";

rowPageRow.Cells.Add(cellPageNo);

}

tblPageRow.Rows.Add(rowPageRow);

}

1.4自定義分頁控件

在既要考慮分頁的靈活性,又要考慮代碼復用的情況下,自定義分頁控件不失為一種好的技術。在 ASP.NET 中,只有 DataGrid 控件具有內置的分頁功能。但是,數據分頁是由模板化的代碼實現的,只要對其他數據控件進行適當的處理,就可實現分頁顯示的功能。例如,自定義控件可以使用ASP.NET中提供的DataList、ListBox等控件分頁顯示數據。

本文定義了一個DataPager的自定義控件。由于自定義控件的實現代碼比較多,這里不再提供,只是給出了它的使用方法,有興趣的讀者可以參考文獻[6]。該方法在查詢數據時,既可以使用普通的SQL查詢語句,也可以使用存儲過程進行。下面給出具體的實現代碼:

前臺代碼

〈%@ Register TagPrefix=\"SqlPagerForTest\"

Namespace=\"SqlPagerForTest\"

Assembly=\"SqlPagerForTest\" %〉

〈DevCenter:SqlPager id=\"sp2\" runat=\"server\" /〉

后臺代碼

普通SQL查詢

sp.ControlToPaginate=\"dgResults\"

sp.ConnectionString=strConn

strComm=\"Select * from pagerepository\"

sp.SelectCommand=strComm

sp.CurrentPageIndex=0

sp.DataBind()

使用存儲過程時的代碼與1.2節類似,限于文章篇幅這里不再贅述。

2試驗結果比較

(1)程序運行時間

3結束語

通過上面的分析可以看出,以上各種技術各有優缺點,使用DataGrid分頁技術適合于數據庫比較小的數據分頁,但數據庫比較大時將會降低程序的執行效率。存儲過程分頁方法適合數據庫比較大時的數據分頁,但每次翻頁更新頁面內容時都要訪問數據庫。表格分頁方法適合于頁面布局需要靈活多變時的情況,但其缺點是每次翻頁時table控件都要創建服務端控件,在數據量相當時執行效率不及存儲過程分頁方法。自定義分頁方法適合于大量代碼復用時的情況。在這種情況下,自定義一個控件以后,可以隨時引用。正確選擇一種分頁方式能夠提高Web開發的效率。上述各種分頁技術是在開發國家基金項目中總結出來的開發經驗。

參考文獻:

[1]FERRACCHIATI F C,GLYNN J..NET數據服務C#高級編程[M]. 毛堯飛,譯. 北京:清華大學出版社,2002:97-163.

[2]袁鵬飛,孫軍安.SQL Server 2000數據庫系統管理[M].北京:人民郵電出版社,2001:89-137.

[3]劉瑜,陳鐵英.Microsoft SQL Server 數據庫的安全策略及實現方法[J].計算機工程與設計,2003,24(1):68-71.

[4]光耀,易虎,李波.基于存儲過程分頁優化Web數據查詢性能[J].微計算機應用, 2004,25(4):475-479.

[5]鐘世芬,柳榮其,孫彪,等.ASP.NET中參數傳值的綜合使用[J].計算機應用研究,2004,21(11):212-214.

[6]WINTELLECT D E. Creating a pager control for ASP.NET[EB/OL]. http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnaspp/html/pagercontrols.asp.

注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”

主站蜘蛛池模板: 91青青视频| 欧美日韩国产在线播放| 久久综合色播五月男人的天堂| 国产va视频| 无码视频国产精品一区二区| 免费在线国产一区二区三区精品| 精品人妻无码中字系列| 日韩a在线观看免费观看| 日韩欧美国产中文| 亚洲免费毛片| 久热re国产手机在线观看| 国产激爽大片高清在线观看| 九九精品在线观看| 国产精品综合色区在线观看| 国产亚洲精品无码专| 亚洲大学生视频在线播放| 色爽网免费视频| 亚洲AV无码乱码在线观看裸奔| 成人午夜网址| 高清不卡毛片| 成人a免费α片在线视频网站| 国产黄色免费看| 国产一区二区影院| 狠狠色香婷婷久久亚洲精品| 激情無極限的亚洲一区免费| 中文字幕欧美日韩高清| 久久亚洲中文字幕精品一区| 色首页AV在线| 国产高清无码第一十页在线观看| 99这里只有精品6| 91免费在线看| 国产噜噜在线视频观看| 免费aa毛片| 日韩午夜福利在线观看| 最新痴汉在线无码AV| 亚洲一区二区约美女探花| 国产乱人视频免费观看| 日韩精品一区二区三区免费在线观看| 久草网视频在线| 国产精品尤物铁牛tv| 国产电话自拍伊人| 亚洲一区黄色| 国产欧美精品一区aⅴ影院| 99爱在线| 亚洲成a人在线观看| 四虎在线观看视频高清无码| 亚洲香蕉在线| 午夜一区二区三区| 在线精品欧美日韩| www成人国产在线观看网站| 亚洲a级在线观看| 日韩中文字幕亚洲无线码| 亚洲中久无码永久在线观看软件| 国产高清在线观看91精品| 欧美色图久久| 中国黄色一级视频| 亚洲视频a| 中文字幕 91| 欧美国产日本高清不卡| 亚洲一区二区三区在线视频| 亚洲最新在线| 四虎在线高清无码| www欧美在线观看| 国产黄色片在线看| 中文字幕人妻av一区二区| 亚洲二区视频| 欧美精品一区在线看| 中文字幕在线免费看| 国产精品偷伦在线观看| 国产成在线观看免费视频| 8090成人午夜精品| 久久毛片网| 波多野结衣一二三| 久久午夜夜伦鲁鲁片不卡| www.youjizz.com久久| 97狠狠操| 91久久国产综合精品女同我| 美女内射视频WWW网站午夜| 91精品人妻一区二区| 88av在线播放| 久久人人爽人人爽人人片aV东京热| 亚洲综合香蕉|