国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Access > 正文

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

2020-03-24 18:05:56
字體:
來源:轉載
供稿:網友
DataGrid連接Access的快速分頁法(1)——需求與現狀
一、需求分析
DataGrid是一個功能強大的ASP.NET Web服務器端控件,它除了能夠按各種方式格式化顯示數據,還可以對數據進行動態的排序、編輯和分頁。大大減輕了廣大Web程序員的工作量。實現DataGrid的分頁功能一直是很多入門者感到棘手的問題,特別是自定義分頁功能,實現的方法多種多樣,非常靈活。 目前大家公認性能最好的應該數SQL Sever結合存儲過程的解決方案。因為在SQL Server的存儲過程里面可以使用游標(Cursor)來遍歷數據庫表中所有的行,結合一個計數器變量就可以快速定位到數據庫表中的某一行了。但是在采用Access數據庫的ASP.NEThtml' target='_blank'>應用程序中,一直沒有一種較好的解決方案。 我們知道,在ASP中可以使用ADO的游標來快速定位當前頁面的數據在數據庫表中的位置。可是ADO.NET中沒有游標這個東西,所以傳統的DataGrid分頁方法都是用諸如“SELECT * FROM Item”的SQL語句從數據庫表中取出所有的記錄,然后DataGrid的自動分頁功能會幫你顯示相應分頁的數據。
二、目前的解決方案
很多人已經意識到了上面描述的問題,并提出了解決方法,即采用自定義分頁,每次從數據庫表中取出要顯示的數據。那么,怎樣取呢?答案就我知道的大概有5種以上吧。使用不同的算法,將會得到不同的效率。經過我粗略的測試,最慢的算法耗費的時間大概是最快的3倍!而且這個數字會隨著記錄總數的增加而增加。 為了方便接下來的討論,在展示 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 每頁顯示的記錄總數
@PageCount 分頁總數
@RecordCount 數據表的記錄總數
@PageIndex 當前頁的索引
@FirstIndex 第一頁的索引
@MiddleIndex 中間頁的索引
@LastIndex 最后一頁的索引
@TableName 數據庫表名稱
@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 現在先讓我們來看看速度最慢的 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 出所有的記錄還要低。 下一篇將詳細介紹一種最快的算法,并根據不同情況,采用不同的變形來有效的提高查詢效率。 本文作者:html教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 米林县| 安溪县| 曲水县| 中牟县| 栖霞市| 文山县| 宿州市| 陕西省| 清流县| 齐齐哈尔市| 泰安市| 舒城县| 兴和县| 高密市| 铜鼓县| 蓝田县| 昌黎县| 磐安县| 龙游县| 东丽区| 康保县| 德惠市| 微博| 绥滨县| 晋宁县| 清新县| 宜都市| 页游| 泸定县| 太仆寺旗| 城步| 容城县| 梁平县| 蕲春县| 定西市| 综艺| 隆安县| 彩票| 广元市| 麦盖提县| 芦溪县|