a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Access > 正文

DataGrid連接Access的快速分頁法(1)

2020-03-24 18:05:56
字體:
供稿:網(wǎng)友
DataGrid連接Access的快速分頁法(1)——需求與現(xiàn)狀
一、需求分析
DataGrid是一個功能強(qiáng)大的ASP.NET Web服務(wù)器端控件,它除了能夠按各種方式格式化顯示數(shù)據(jù),還可以對數(shù)據(jù)進(jìn)行動態(tài)的排序、編輯和分頁。大大減輕了廣大Web程序員的工作量。實(shí)現(xiàn)DataGrid的分頁功能一直是很多入門者感到棘手的問題,特別是自定義分頁功能,實(shí)現(xiàn)的方法多種多樣,非常靈活。 目前大家公認(rèn)性能最好的應(yīng)該數(shù)SQL Sever結(jié)合存儲過程的解決方案。因?yàn)樵赟QL Server的存儲過程里面可以使用游標(biāo)(Cursor)來遍歷數(shù)據(jù)庫表中所有的行,結(jié)合一個計數(shù)器變量就可以快速定位到數(shù)據(jù)庫表中的某一行了。但是在采用Access數(shù)據(jù)庫的ASP.NEThtml' target='_blank'>應(yīng)用程序中,一直沒有一種較好的解決方案。 我們知道,在ASP中可以使用ADO的游標(biāo)來快速定位當(dāng)前頁面的數(shù)據(jù)在數(shù)據(jù)庫表中的位置。可是ADO.NET中沒有游標(biāo)這個東西,所以傳統(tǒng)的DataGrid分頁方法都是用諸如“SELECT * FROM Item”的SQL語句從數(shù)據(jù)庫表中取出所有的記錄,然后DataGrid的自動分頁功能會幫你顯示相應(yīng)分頁的數(shù)據(jù)。
二、目前的解決方案
很多人已經(jīng)意識到了上面描述的問題,并提出了解決方法,即采用自定義分頁,每次從數(shù)據(jù)庫表中取出要顯示的數(shù)據(jù)。那么,怎樣取呢?答案就我知道的大概有5種以上吧。使用不同的算法,將會得到不同的效率。經(jīng)過我粗略的測試,最慢的算法耗費(fèi)的時間大概是最快的3倍!而且這個數(shù)字會隨著記錄總數(shù)的增加而增加。 為了方便接下來的討論,在展示 SQL 語句之前,首先讓我們做如下約定: PageIndex ItemId
ProductId
Price
0
001
0011
$12 002
0011
$13 003
0011
$12 1
004
0012
$13 005
0012
$11 006
0012
$14 2
007
0013
$14 008
0013
$12 009
0014
$13 3
010
0011
$13 011
0012
$15 012
0014
$16 4
013
0013
$12 014
0013
$13 變量 用途
@PageSize 每頁顯示的記錄總數(shù)
@PageCount 分頁總數(shù)
@RecordCount 數(shù)據(jù)表的記錄總數(shù)
@PageIndex 當(dāng)前頁的索引
@FirstIndex 第一頁的索引
@MiddleIndex 中間頁的索引
@LastIndex 最后一頁的索引
@TableName 數(shù)據(jù)庫表名稱
@PrimaryKey 主鍵字段名稱
@QueryFields 要查詢的字段集
@Condition 篩選條件
定義:
@PageCount = (int)Math.Ceiling((double)@RecordCount / @PageSize)
@FirstIndex = 0
@LastIndex = @PageCount - 1
@MiddleIndex = (int)Math.Ceiling((double)@PageCount / 2) – 1 預(yù)設(shè):
@PageSize = 2
@RecordCount = 9
@PageCount = 4 現(xiàn)在先讓我們來看看速度最慢的 SQL 語句: SELECT TOP @PageSize * FROM @TableName AS a
WHERE @PrimaryKey NOT IN (
SELECT TOP @PageSize*@PageIndex @PrimaryKey FROM @TableName AS b
ORDER BY @PrimaryKey
)
ORDER BY @PrimaryKey 這條語句慢就慢在 NOT IN 這里,主 SELECT 語句遍歷的每個 @PrimaryKey 的值都要跟子 SELECT 語句的結(jié)果集中的每一個 @PrimaryKey 的值進(jìn)行比較,這樣時間復(fù)雜度非常大。其實(shí)我們平時編寫 SQL 語句的時候應(yīng)該盡量避免用 NOT IN 語句,因?yàn)樗鶗岣哒麄€ SQL 語句的時間復(fù)雜度。 還有一種是用兩個 TOP 的 SQL 語句,如下所示: SELECT * FROM (
SELECT TOP @PageSize * FROM (
SELECT TOP @PageSize*(@PageIndex+1) * FROM @TableName
ORDER BY @PrimaryKey
) TableA
ORDER BY @PrimaryKey DESC
) TableB
ORDER BY @PrimaryKey 這條 SQL 語句空間復(fù)雜度比較大。如果要顯示的分頁面剛好是最后一頁,那么它的效率比直接SELECT 出所有的記錄還要低。 下一篇將詳細(xì)介紹一種最快的算法,并根據(jù)不同情況,采用不同的變形來有效的提高查詢效率。 本文作者:html教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 男女视频在线免费观看 | 青青草在线视频免费观看 | 国产精品黄网站在线观看 | 久久成人国产精品入口 | 日韩2020狼一二三 | 99精品国产一区二区 | 亚洲午夜激情网 | 午夜男人天堂 | 国产精品久久久久免费a∨ 国产激情一区二区三区 | 欧美猛交ⅹxxx乱大交视频 | 中文字幕高清在线 | 91亚洲高清 | 欧美色综合| 欧美午夜网 | av在线免费网址 | 国产精品久久久久久久久久久久久久 | 日韩精品久久久久久 | 亚洲国产aⅴ成人精品无吗 91精品国产一区二区 | 日韩午夜激情 | 亚洲精品国产第一综合99久久 | www欧美日韩 | 啪啪免费小视频 | 精品国产一区二区三区电影小说 | 99热在线免费观看 | 国产精品无码永久免费888 | 少妇久久久久 | 好硬好涨老师受不了了视频 | 久久99深爱久久99精品 | 极品av| 久久午夜精品影院一区 | 亚洲国产精品久久久 | 亚洲在线| 美女久久久 | 九九色综合 | 久久综合九色综合欧美狠狠 | 91香蕉视频在线观看 | 日韩视频在线播放 | 青草成人免费视频 | 91蜜桃婷婷亚洲最大一区 | 一级特黄 | 久久国产精品免费一区二区三区 |