麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

DataGrid連接Access的快速分頁法(1)——需求與現(xiàn)狀

2024-09-07 19:04:59
字體:
來源:轉載
供稿:網(wǎng)友
datagrid連接access的快速分頁法(1)——需求與現(xiàn)狀
一、需求分析
datagrid是一個功能強大的asp.net web服務器端控件,它除了能夠按各種方式格式化顯示數(shù)據(jù),還可以對數(shù)據(jù)進行動態(tài)的排序、編輯和分頁。大大減輕了廣大web程序員的工作量。實現(xiàn)datagrid的分頁功能一直是很多入門者感到棘手的問題,特別是自定義分頁功能,實現(xiàn)的方法多種多樣,非常靈活。

目前大家公認性能最好的應該數(shù)sql sever結合存儲過程的解決方案。因為在sql server的存儲過程里面可以使用游標(cursor)來遍歷數(shù)據(jù)庫表中所有的行,結合一個計數(shù)器變量就可以快速定位到數(shù)據(jù)庫表中的某一行了。但是在采用access數(shù)據(jù)庫的asp.net應用程序中,一直沒有一種較好的解決方案。

我們知道,在asp中可以使用ado的游標來快速定位當前頁面的數(shù)據(jù)在數(shù)據(jù)庫表中的位置。可是ado.net中沒有游標這個東西,所以傳統(tǒng)的datagrid分頁方法都是用諸如“select * from item”的sql語句從數(shù)據(jù)庫表中取出所有的記錄,然后datagrid的自動分頁功能會幫你顯示相應分頁的數(shù)據(jù)。
二、目前的解決方案
很多人已經(jīng)意識到了上面描述的問題,并提出了解決方法,即采用自定義分頁,每次從數(shù)據(jù)庫表中取出要顯示的數(shù)據(jù)。那么,怎樣取呢?答案就我知道的大概有5種以上吧。使用不同的算法,將會得到不同的效率。經(jīng)過我粗略的測試,最慢的算法耗費的時間大概是最快的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 當前頁的索引
@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

預設:
@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 語句的結果集中的每一個 @primarykey 的值進行比較,這樣時間復雜度非常大。其實我們平時編寫 sql 語句的時候應該盡量避免用 not in 語句,因為它往往會提高整個 sql 語句的時間復雜度。

還有一種是用兩個 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 語句空間復雜度比較大。如果要顯示的分頁面剛好是最后一頁,那么它的效率比直接select 出所有的記錄還要低。

下一篇將詳細介紹一種最快的算法,并根據(jù)不同情況,采用不同的變形來有效的提高查詢效率。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久网站 | 欧美一区二区三区久久精品视 | 国产人成精品综合欧美成人 | 中文字幕国产一区 | 调教小男生抽打尿孔嗯啊视频 | 色中色在线播放 | 亚洲小视频在线 | 91香蕉影视 | 国产在线精品一区二区夜色 | 精品国产一区二区在线 | 黄色一级片免费观看 | 夜夜看 | 国产刺激高潮av | 女人裸体让男人桶全过程 | 精品国产乱码久久久久久丨区2区 | 中文字幕网站在线 | 精品一区二区三区在线播放 | 久久亚洲春色中文字幕久久 | 国产免费看片 | 久久超 | 911网站大全在线观看 | 羞羞视频免费网站 | 羞羞视频免费网站 | 免费在线观看亚洲 | 中文字幕爱爱视频 | 欧美一级黄色免费看 | 国产91片 | 国产福利视频在线观看 | 成人在线激情视频 | 成年免费视频黄网站在线观看 | 日本一区二区高清不卡 | 日韩视频不卡 | 一级成人黄色片 | 色诱亚洲精品久久久久久 | 天堂亚洲一区 | 91成人在线免费观看 | 日韩.www| 国产在线导航 | 亚洲第一成人在线视频 | 99爱视频 | 日韩蜜桃视频 |