亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        .NET框架下基于AJAX的Web數(shù)據(jù)分頁研究

        2008-12-31 00:00:00朱占立
        電腦知識與技術 2008年28期

        摘要:數(shù)據(jù)分頁是Web應用中經(jīng)常使用的一種技術,也是提高Web數(shù)據(jù)訪問性能的主要手段。這里分析了.NET框架下的幾種數(shù)據(jù)分頁技術,比較了這些分頁技術的優(yōu)缺點;并給出.NET下AJAX + jQuery使用Sql2005存儲過程實現(xiàn)分頁的例子。

        關鍵詞:.NET框架;Web數(shù)據(jù)分頁;AJAX;存儲過程

        中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)28-0030-03

        The Research of Web Data Paging Based on AJAX in .Net Framework

        ZHANG Xin,ZHU Zhan-li,LI Yong

        (Xi'an Shiyou University, Xi'an 710065,China)

        Abstract: Data paging is a common technology in Web application, and also it is a primary method to improve the performance of Web data access. There has been analyzed .NET frame lower several kinds data paging technology, parallel these paging technology shortcoming; And be given to out Under .Net , AJAX + jQuery uses Sql2005 stored procedure to realize paging example.

        Key words: .NET Framework; Web data paging; AJAX; Stored Procedure

        1 引言

        建立動態(tài)Web應用,分頁瀏覽功能不可或缺,這一問題是數(shù)據(jù)庫與Web頁面處理中常見的問題。其解決方案有很多,且隨著技術的發(fā)展,提出了許多新的分頁方案。特別是近幾年來AJAX技術的使用,使得頁面與用戶的異步交互成為可能;這給數(shù)據(jù)分頁技術帶來了新的思路。為本文將針對數(shù)據(jù)分頁問題給出了.NET中的幾種解決方案并分析了各自的優(yōu)缺點,給出一個.NET+AJAX技術實現(xiàn)數(shù)據(jù)分頁的例子。

        2 幾種常見分頁解決方案

        本文使用.NET 3.5、C#、SQL Server 2005實現(xiàn)各種分頁過程,本文的jQuery是jQuery 1.2.6版,并使用了pagination插件實現(xiàn)翻頁鏈接。

        2.1 使用DataGrid結合DataSet分頁

        這是.NET默認的分頁方法,DataSet一次性從數(shù)據(jù)庫提取所有符合條件的數(shù)據(jù)到應用服務器,DataGrid控件從中選擇指定頁的數(shù)據(jù),舍棄其余數(shù)據(jù)。這種方法編程簡單,在數(shù)據(jù)量很小時也不存在問題。但對于數(shù)據(jù)較多的情況,例如符合條件的記錄上萬條時,每次分頁檢索,都要加載所有這些數(shù)據(jù)到Web服務器中。這即加重了數(shù)據(jù)庫服務器的負擔,又嚴重影響Web應用服務器的速度;用戶數(shù)量多的時候,再高檔的服務器也無法滿足要求。這種方案適應面有限——僅適用于數(shù)據(jù)量很少的場合,但程序實現(xiàn)簡單。

        2.2 傳統(tǒng)Web結合存儲過程的分頁

        每次分頁檢索時,利用存儲過程只從數(shù)據(jù)庫取出需要顯示的指定頁的數(shù)據(jù),然后顯示在Web上。由于存儲過程是在數(shù)據(jù)庫中預處理過的,因此執(zhí)行起來很有效率。同時由于每次頁面顯示時只在Web服務器中加載指定頁數(shù)據(jù),占用資源較少。這種方案可應用于數(shù)據(jù)量較大的場合,但由于數(shù)據(jù)庫和Web服務器間的通訊及頁面刷新延遲等原因,用戶在不同頁面間切換時有刷新延遲現(xiàn)象,特別是當數(shù)據(jù)量很大或頁面較復雜時尤為明顯。

        2.3 存儲過程結合AJAX技術實現(xiàn)分頁

        同上一種方案一樣,使用存儲過程每次取出指定頁的數(shù)據(jù)到Web服務器;然后將其序列化為JSON格式并發(fā)送到客戶端,客戶端腳本程序將數(shù)據(jù)顯示在本機頁面上。這種方案客戶端和服務器間通訊量很少,客戶端無刷新操作,所以延遲非常小,是比較理想的Web分頁查詢方式。

        2.4 三種分頁方案比較

        總結上述三點,對幾種方案比較(見表1)后,可得出結論:雖然存儲過程和AJAX實現(xiàn)起來較麻煩,但對用戶來說這種方式最為好用;對數(shù)據(jù)庫服務器、Web服務器以及網(wǎng)絡帶寬占用最少。雖然占用了一些瀏覽器資源,但客戶端計算機資源相對閑置資源較多,利用起來后可以更好地服務于用戶,盡量減少用戶操作延遲時間。

        3 本文用到的技術簡介

        3.1 AJAX技術簡介

        Ajax可以說是把JavaScript技術和XML HttpRequest對象放在Web表單和服務器之間。例如:當用戶指示翻到指定頁時,該數(shù)據(jù)發(fā)送給一些JavaScript代碼而不直接發(fā)送給服務器;JavaScript代碼處理這些數(shù)據(jù)并向服務器發(fā)送請求。同時用戶屏幕上的表單也不會閃爍、消失或延遲。換句話說,JavaScript腳本在后臺發(fā)送請求,用戶甚至不知道請求的發(fā)出。更好的是,請求是異步發(fā)送的,就是說用戶不用等待服務器的響應。因此用戶可以繼續(xù)輸入數(shù)據(jù)、滾動屏幕和使用應用程序。然后,服務器將數(shù)據(jù)返回給JS腳本,由腳本決定如何處理這些數(shù)據(jù)。它可以迅速更新表單數(shù)據(jù),讓人感覺翻頁操作是立即完成的。

        這就是XML Http Request的強大之處。它可以根據(jù)需要自行與服務器進行交互,用戶可以完全不知道后臺發(fā)生的一切。結果類似于桌面應用程序的動態(tài)、快速響應、高交互性,同B/S結構的簡便、互聯(lián)互通形成了完美的結合。

        3.2 JOSN數(shù)據(jù)格式

        JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣。這些特性使JSON成為理想的AJAX數(shù)據(jù)交換格式。JSON的另一優(yōu)點是它的非冗長性。在XML中,打開和關閉標記是必需的,這樣才能滿足標記的依從性;而在JSON中,所有這些要求只需通過一個簡單的括號即可滿足。這樣能最大限度地減少AJAX通訊的數(shù)據(jù)量,有利于提高響應速度。

        所以當前JSON格式在AJAX數(shù)據(jù)傳輸環(huán)節(jié)大有取代XML的趨勢,優(yōu)勢明顯。

        3.3 jQuery簡介

        簡單的說,jQuery是javascript語言的一個輕量級的資源庫,或者說一個框架,它兼容CSS3,還兼容各種瀏覽器。jQuery能快速,簡潔的使用HTML documents, handle events, perform animations,并且能把Ajax交互應用到網(wǎng)頁。應用jQuery可以大大簡化Ajax操作,而且可以很方便地建出漂亮的頁面效果,為javascript應用的兼容性和簡易性提供了良好的平臺。

        4 存儲過程結合AJAX技術實現(xiàn)分頁的實現(xiàn)

        本文使用.NET 3.5、C#、SQL Server 2005實現(xiàn)各種分頁過程。

        4.1 設計思路

        用戶發(fā)出的換頁指令由JavaScript腳本截獲并異步發(fā)送到Web服務器,Web服務器調用數(shù)據(jù)庫的存儲過程得到頁面內容并轉換成JSON格式,JSON格式內容被異步發(fā)回JavaScript腳本,JavaScript腳本在瀏覽器后臺動態(tài)局部刷新用戶界面,完成換頁操作。(如圖1所示)。

        4.2 SQL 2005提供Ranking函數(shù)實現(xiàn)分頁存儲過程

        在SQL Server 2005里面,由于系統(tǒng)提供了內建的ranking函數(shù);給待分頁的表行生成行號,我們不再需要利用Identity字段,只需利用Row_Number()函數(shù)即可,這給我們分頁存儲過程設計帶來極大便利,下面是使用Row_Number()寫的存儲過程核心部分源碼。

        --獲取處第一頁外的頁面數(shù)據(jù)

        Declare @List_ID1 int,@List_ID2 int;

        Set @List_ID2=(@Page_Size*@Page);--當前頁記錄結束

        Set @List_ID1=(@List_ID2-@Page_Size);--當前頁記錄開始

        Set @SQL_String=

        N'Select * From (

        Select ROW_NUMBER() Over('+@SQL_Order+N')AS List_ID,'+@SQL_Fields

        +N'from '+@SQL_TableName+N' where '+@SQL_Where+N'

        )AS A

        Where A.List_ID>'+Cast(@List_ID1 AS Nvarchar)+N'

        and A.List_ID<='+Cast(@List_ID2 AS Nvarchar);

        Execute sp_executesql @SQL_String;

        4.3 Web服務器中調用存儲過程讀取頁面信息

        存儲過程在C#程序中被調用,得到要讀取的頁面信息,具體來說:利用SqlCommand建立命令字,并執(zhí)行SqlCommand. ExecuteReader()方法得到要訪問頁面的SqlDataReader對象;由處理程序將該對象轉換成JSON格式的字符串。為節(jié)省篇幅,這里省略數(shù)據(jù)庫連接部分的源代碼,僅列出DataReader轉JSON的部分代碼。

        StringBuilder sb = new StringBuilder();

        sb.Append(\"Group:[\");

        while(Dr.Read()) {

        sb.Append(\"{\");

        for (int i = 0; i

        sb.Append(\"\\\"\");

        sb.Append(Dr. GetName(i));

        sb.Append(\"\\\":\\\"\");

        sb.Append(Dr[i].ToString());

        sb.Append(\"\\\",\");

        }

        sb.Remove(jsonBuilder.Length - 1, 1);

        sb.Append(\"},\");

        }

        Dr.Close();

        sb.Remove(sb.Length - 1, 1);

        sb.Append(\"]}\");

        4.4 Web服務器AJAX服務端實現(xiàn)

        Web服務器在PageLoad事件中要加入如下指令,把JSON數(shù)據(jù)傳輸?shù)娇蛻舳藶锳JAX客戶端程序提供服務。

        int PageNow, PageTotal;

        PageNow = Str2Int(Request.Params[\"PageNow\"]);

        JsonStr =GetJson(getGroup(PageNow,out PageTotal));

        Response.Write(\"{\");

        Response.Write(\"PageNow:\\\"\" + PageNow + \"\\\"\");

        Response.Write(\",PageTotal:\\\"\" + PageTotal + \"\\\"\");

        if (JsonStr != 1) Response.Write(\",\" + JsonStr);//內容寫入JSON

        Response.Write(\"}\");

        Response.End();

        4.5 AJAX客戶端實現(xiàn)

        客戶端JavaScript腳本完成JSON接收,并將其顯示在頁面上的核心代碼如下:

        $.ajaxSetup({//初始化jQuery ajax

        type: \"post\",

        dataType : \"json\" });

        function AjaxGetPage(pp){

        $.ajax({//ajax接收部分

        data : \"AJAX=AjaxGetPagePageNow=\" + pp,

        success : function(jsonobj){

        // 刷新頁面底端的 “上一頁”,”下一頁”等按鈕

        if(jsonobj.PageTotal jsonobj.PageNow){

        $(\"#Pagination\").pagination(jsonobj.PageTotal, {

        current_page: parseInt(jsonobj.PageNow),

        callback: function(page_id, jq){

        AjaxGetPage(page_id);

        }

        });

        PageNow=jsonobj.PageNow;

        }

        $(\"#AjaxTbody > tr\").remove();//刪除舊頁面

        if(jsonobj.Groups){//重新繪制新頁面

        for(var i=0;i

        $(\"#AjaxTbody\").append(

        \"\" + jsonobj.Groups[i].Name + \"\" +

        \"\" + jsonobj.Groups[i].Notes+ \"\");

        }

        }

        }

        });

        }

        4.6 執(zhí)行效果

        利用AJAX技術結合jQuery實現(xiàn)的異步頁面顯示和SQL2005存儲過程的組合,執(zhí)行效果非常理想;頁面刷新等待時間很短,無論數(shù)據(jù)源中數(shù)據(jù)量的多少,執(zhí)行速度都很穩(wěn)定。圖2為上述程序執(zhí)行效果。

        5 結束語

        本文簡要說明了三種分頁技術及其優(yōu)缺點,重點給出了組合AJAX、jQuery、JSON、SQL2005存儲過程等技術的一套較先進的Web數(shù)據(jù)分頁方案。如果網(wǎng)絡速度較慢或數(shù)據(jù)庫非常復雜而導致?lián)Q頁時響應時間延長,可以采用頁面Cache技術,將“上一頁”、“下一頁”等頁面內容同本頁內容一起傳輸?shù)角芭_,翻頁就可實現(xiàn)無延遲。上述分頁技術是我們在開發(fā)實踐中總結出來的經(jīng)驗,很高興和大家分享。

        參考文獻:

        [1] Introducing JSON [EB/OL],http://json.org.

        [2] (美)內格爾,等編著,C#高級編程(第4版)[M],清華大學出版社,2006,10.

        [3] 基于Ajax的Data Window框架分析[J],計算機工程,(34,7).

        麻豆精品国产免费av影片| 亚洲av无码一区二区二三区下载| 在线亚洲欧美日韩精品专区| 欧美激情二区| 久久天堂av色综合| 国产激情一区二区三区在线蜜臀 | 午夜精品久久99蜜桃| 亚洲av高清一区二区三| 韩国三级大全久久网站| 久久亚洲国产成人精品性色| 香蕉久久人人97超碰caoproen| 精品国产18禁久久久久久久| WWW拍拍拍| 国内偷拍第一视频第一视频区| 二区三区三区视频在线观看| 蜜桃视频无码区在线观看| 精品成人乱色一区二区| 欧美在线资源| 亚洲处破女av一区二区| 国产专区国产精品国产三级| 色偷偷亚洲第一成人综合网址| 久久精品国产亚洲av大全| 亚洲福利天堂网福利在线观看| av男人天堂网在线观看| 成人精品一区二区三区电影| 中国人妻被两个老外三p| 亚洲黄色尤物视频| 亚洲精品熟女av影院| 国产精品久久久久9999| 亚洲欧美成人一区二区在线电影| 亚洲女同精品一区二区久久| 日韩av一区二区三区精品| 综合久久精品亚洲天堂| 欧美日韩在线视频| 中文无码熟妇人妻av在线| 色婷婷五月综合亚洲小说| 国产一区二区丁香婷婷| 国产色婷婷久久又粗又爽 | 欧美俄罗斯乱妇| 亚洲国产高清在线视频| 岛国熟女精品一区二区三区|