欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net安全、實(shí)用、簡(jiǎn)單的大容量存儲(chǔ)過程分頁(yè)第2/2頁(yè)

 更新時(shí)間:2009年04月07日 23:26:48   作者:  
昨晚研究到2點(diǎn)多,對(duì)網(wǎng)絡(luò)上主流的分頁(yè)存儲(chǔ)過程大體看了一遍,但對(duì)安全以及如何使用很多文章都沒有過多的提及,而我要在這些文章的基礎(chǔ)上總結(jié)出一個(gè)比較實(shí)用的分頁(yè)存儲(chǔ)過程,方便大家在以后的項(xiàng)目中使用。

開始測(cè)試:
       在BLL層(業(yè)務(wù)邏輯層),DAL層(數(shù)據(jù)訪問層),DB(訪問層基類),WEB(網(wǎng)站),關(guān)于3層結(jié)構(gòu)這里就不介紹了,大家可以看看我前面寫過的文章《.net三層結(jié)構(gòu)初探》 。
先添加存儲(chǔ)過程:
復(fù)制代碼 代碼如下:

--阿會(huì)楠根據(jù)網(wǎng)絡(luò)上的代碼進(jìn)行了修改,版權(quán)歸原作者所有2009-4-5
--修改輸出總記錄數(shù)


create PROCEDURE [dbo].[pagination]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000), -- 需要返回的列
@fldName varchar(255), -- 排序的字段名
@PageSize int, -- 頁(yè)尺寸
@PageIndex int, -- 頁(yè)碼
@OrderType bit, -- 設(shè)置排序類型, 非 0 值則降序
@strWhere varchar(1500), -- 查詢條件 (注意: 不要加 where)
@rowCount int output --查詢到的記錄數(shù)
AS

declare @strSQL varchar(5000) -- 主語句
declare @strTmp varchar(110) -- 臨時(shí)變量
declare @strOrder varchar(400) -- 排序類型
declare @strCountTmp nvarchar(100) --記錄數(shù)
declare @timediff datetime --耗時(shí)

begin
select @timediff = Getdate()
if @strWhere !=''
set @strCountTmp = 'select @rowCount = count(*) from [' + @tblName + '] where '+@strWhere
else
set @strCountTmp = 'select @rowCount = rowCount_tmp from tmp where (table_tmp = ''' + @tblName +''')'

exec sp_executesql @strCountTmp,N'@rowCount int out',@rowCount out --輸出總記錄數(shù)

if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就執(zhí)行降序,這句很重要!
end

else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一頁(yè)就執(zhí)行以上代碼,這樣會(huì)加快執(zhí)行速度
end

else
begin
--以下代碼賦予了@strSQL以真正執(zhí)行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end

end
exec (@strSQL)
select datediff(ms,@timediff,GetDate()) as runtime

不放心自己測(cè)試下吧。
復(fù)制代碼 代碼如下:

USE [data_Test]
GO

DECLARE @return_value int,
@rowCount int

EXEC @return_value = [dbo].[pagination]
@tblName = 'userinfo',
@strGetFields = N'id',
@fldName = N'id',
@PageSize = 10,
@PageIndex = 300,
@OrderType = 0,
@strWhere = null,
@rowCount = @rowCount OUTPUT

SELECT @rowCount as N'@rowCount'

SELECT 'Return Value' = @return_value

GO

最主要的DAL層代碼:
復(fù)制代碼 代碼如下:

public DataSet GetList(int PageIndex, string strWhere,ref int rowCount)
{
SqlParameter[] parameter = sosuo8.DBUtility.DbHelperSQL.pagePara();

parameter[0].Value = "userinfo";
parameter[1].Value = "id,userName,userWebName,createDate";
parameter[2].Value = "id";
parameter[3].Value = 10;
parameter[4].Value = PageIndex;
parameter[5].Value = 0;
parameter[6].Value = strWhere;
parameter[7].Direction = ParameterDirection.Output;//聲明為輸出類型

DataSet ds = sosuo8.DBUtility.DbHelperSQL.RunProcedure("pagination",parameter,"userinfo");
rowCount = Convert.ToInt32(parameter[7].Value);
return ds;

}

default.aspx.cs代碼
復(fù)制代碼 代碼如下:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
bind();
}
}


private void bind()//綁定數(shù)據(jù)
{
this.anPager.PageSize = 10;//每頁(yè)記錄數(shù)
this.anPager.AlwaysShow = true;//是否一直顯示分頁(yè)
int rowCount = 0;//初始化記錄數(shù)為0
string wherestr = string.Empty;//搜索關(guān)鍵字,這部分后面我在講講優(yōu)化
sosuo8.BLL.bll_test bll = new sosuo8.BLL.bll_test();
this.rpt.DataSource = bll.GetList(this.anPager.CurrentPageIndex,wherestr,ref rowCount);//rowCount在經(jīng)過這個(gè)函數(shù)后,返回的是重新賦值的記錄總數(shù)
this.anPager.RecordCount = rowCount;
this.rpt.DataBind();
}

protected void anPager_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
this.anPager.CurrentPageIndex = e.NewPageIndex;
bind();
}
}

里面涉及到aspnetpager的使用,如果你還不會(huì)使用這個(gè)控件,可以自己看看有關(guān)教程。最終的界面如下:

       令我十分高興的是,在處理520W的記錄時(shí),它速度還在可以接受的范圍內(nèi),不會(huì)出現(xiàn)超時(shí)的現(xiàn)象。而作為優(yōu)化,可以在界面層中盡量少讀數(shù)據(jù)。可以加上以page為參數(shù)頁(yè)面輸出緩存:
復(fù)制代碼 代碼如下:

<%@ OutputCache Duration="360" VaryByParam="page" %>

你也許并沒有用過里面的一些控件,但是知道原理和方法我相信你也可以自由搭配你需要的東西,下面我僅上傳部分比較重要的代碼,對(duì)于需要的控件我也放在里面,至于建表測(cè)試那些大家慢慢研究吧!當(dāng)前的存儲(chǔ)過程只能針對(duì)一個(gè)字段排序,后面有時(shí)間我會(huì)修改成多字段排序
打包下載 http://xiazai.jb51.net/200904/yuanma/page.rar

相關(guān)文章

  • Web.config 和 App.config 的區(qū)別分析

    Web.config 和 App.config 的區(qū)別分析

    Web.config 和 App.config 的區(qū)別分析,需要的朋友可以參考一下
    2013-05-05
  • asp.net Hashtable 遍歷寫法

    asp.net Hashtable 遍歷寫法

    h為Hashtable
    2009-02-02
  • asp.net利用google的api做翻譯

    asp.net利用google的api做翻譯

    google提供了一組API可以給我們很方便的實(shí)現(xiàn)語言翻譯功能,對(duì)于我們(中國(guó)人)而言,常用的是中文與英文的互譯。
    2009-05-05
  • 在.Net中使用MongoDB的方法教程

    在.Net中使用MongoDB的方法教程

    最近在研究mongodb,在網(wǎng)上搜索發(fā)現(xiàn)針對(duì).net 中使用mongodb的文章要么是早期的驅(qū)動(dòng)版本,要么資料很少,所以寫個(gè)隨筆記錄一下,本文詳細(xì)的給大家介紹了在.Net中使用MongoDB的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • ASP.NET搭配Ajax實(shí)現(xiàn)搜索提示功能

    ASP.NET搭配Ajax實(shí)現(xiàn)搜索提示功能

    為了更好的用戶體驗(yàn),不論是桌面軟件還是網(wǎng)站,在搜索查詢的輸入中都會(huì)加入提示功能,就像百度搜索一樣!今天筆者就ASP.NET編程介紹一下如何利用Ajax來實(shí)現(xiàn)搜索信息提示功能。
    2015-09-09
  • Entity?Framework管理一對(duì)二實(shí)體關(guān)系

    Entity?Framework管理一對(duì)二實(shí)體關(guān)系

    本文詳細(xì)講解了Entity?Framework管理一對(duì)二實(shí)體關(guān)系的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 淺談ASP.NET的Postback 實(shí)例代碼

    淺談ASP.NET的Postback 實(shí)例代碼

    說道ASP.NET的Postback,就得說Web Page的生命周期,但是Web Page的生命周期卻不是三言兩語就能夠說得清楚的,所以在這里單純站的編程的角度,撇開Web Page 的生命周期淺談Postback。
    2009-08-08
  • ASP.Net MVC 布局頁(yè)、模板頁(yè)使用方法詳細(xì)介紹

    ASP.Net MVC 布局頁(yè)、模板頁(yè)使用方法詳細(xì)介紹

    這篇文章主要介紹了ASP.Net MVC 布局頁(yè)、模板頁(yè)使用方法詳細(xì)介紹,需要的朋友可以參考下
    2017-08-08
  • ASP.NET?Core中使用滑動(dòng)窗口限流的問題及場(chǎng)景分析

    ASP.NET?Core中使用滑動(dòng)窗口限流的問題及場(chǎng)景分析

    這篇文章主要介紹了ASP.NET?Core中使用滑動(dòng)窗口限流的問題,主要介紹服務(wù)限流場(chǎng)景中的應(yīng)用,如何使用滑動(dòng)窗口來解決這個(gè)問題,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-12-12
  • ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能

    ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5使用MiniProfiler監(jiān)控MVC性能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論