日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

DataGrid连接Access的快速分页法(1)——需求与现状

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGrid连接Access的快速分页法(1)——需求与现状 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:黎波

一、需求分析

???? DataGrid是一個功能強大的ASP.NET Web服務器端控件,它除了能夠按各種方式格式化顯示數據,還可以對數據進行動態的排序、編輯和分頁。大大減輕了廣大Web程序員的工作量。實現DataGrid的分頁功能一直是很多入門者感到棘手的問題,特別是自定義分頁功能,實現的方法多種多樣,非常靈活。 ? ???? 目前大家公認性能最好的應該數SQL Sever結合存儲過程的解決方案。因為在SQL Server的存儲過程里面可以使用游標(Cursor)來遍歷數據庫表中所有的行,結合一個計數器變量就可以快速定位到數據庫表中的某一行了。但是在采用Access數據庫的ASP.NET應用程序中,一直沒有一種較好的解決方案。 ? ???? 我們知道,在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 出所有的記錄還要低。 ? ?

總結

以上是生活随笔為你收集整理的DataGrid连接Access的快速分页法(1)——需求与现状的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。