亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

DataGrid基于Access的快速分頁法

2024-09-07 19:04:57
字體:
供稿:網(wǎng)友
datagrid是一個功能非常強大的asp.net web服務器端控件,它除了能夠方便地按各種方式格式化顯示表格中的數(shù)據(jù),還可以對表格中的數(shù)據(jù)進行動態(tài)的排序、編輯和分頁。使人員從繁瑣的代碼中解放。實現(xiàn)datagrid的分頁功能一直是很多初學asp.net的人感到棘手的問題,特別是自定義分頁功能,實現(xiàn)方法多種多樣,非常靈活。本文將向大家介紹一種datagird控件在access數(shù)據(jù)庫下的快速分頁法,幫助初學者掌握datagrid的分頁技術(shù)。



目前的分頁方法



datagrid內(nèi)建的分頁方法是使用諸如“select * from <table>”的sql語句從數(shù)據(jù)庫表中取出所有的記錄到dataset中,datagrid控件綁定到該dataset之后,它的自動分頁功能會幫你從該dataset中篩選出當前分頁的數(shù)據(jù)并顯示出來,其他沒有用的數(shù)據(jù)將被丟棄。



還有一種方法是使用自定義分頁功能,先將datagrid的allowcustompaging屬性設(shè)置為true,再利用dataadapter的fill方法將數(shù)據(jù)的篩選工作提前到填充dataset時,而不是讓datagrid幫你篩選:



public int fill (

dataset dataset, //要填充的 dataset。

int startrecord, //從其開始的從零開始的記錄號。

int maxrecords, //要檢索的最大記錄數(shù)。

string srctable //用于表映射的源表的名稱。

);




該方法首先將來自查詢處的結(jié)果填充到dataset中,再將不需要顯示的數(shù)據(jù)丟棄。當然,自定義分頁功能需要完成的事情還不止這些,本文將在后面詳細介紹。



以上兩種方法的工作原理都是先從數(shù)據(jù)庫中取出所有的記錄,然后篩選出有用的數(shù)據(jù)顯示出來??梢姡瑑煞N方法的效率基本上是一致的,因為它們在數(shù)據(jù)訪問階段并沒有采取有效的措施來減少access對磁盤的訪問次數(shù)。對于小數(shù)量的記錄,這種開銷可能是比較小的,如果針對大量數(shù)據(jù)的分頁,開銷將會非常巨大,從而導致分頁的速度非常的慢。換句話說,就算每個datagrid分頁面要顯示的數(shù)據(jù)只是一個擁有幾萬條記錄的數(shù)據(jù)庫表的其中10條,每次datagrid進行分頁時還是要從該表中取出所有的記錄。



很多人已經(jīng)意識到了這個問題,并提出了解決方法:用自定義分頁,每次只從數(shù)據(jù)庫中取出要顯示的數(shù)據(jù)。這樣,我們需要在sql語句上下功夫了。由于access不支持真正的存儲過程,在編寫分頁算法上就沒有sql server那么自由了。sql server可以在存儲過程中利用臨時表來實現(xiàn)高效率的分頁算法,受到了廣泛的采用。而對于access,我們必須想辦法在一條sql語句內(nèi)實現(xiàn)最高效的算法。



用一條sql語句取得某段數(shù)據(jù)的方法有好幾種。算法不同,效率也就不同。我經(jīng)過粗略的測試,發(fā)現(xiàn)效率最差的sql語句執(zhí)行時耗費的時間大概是效率最高的sql語句的3倍!而且這個數(shù)值會隨著記錄總數(shù)的增加而增加。下面將介紹其中兩條常用的sql語句。



為了方便接下來的討論,我們先約定如下:



變量
說明
變量
說明

@pagesize
每頁顯示的記錄總數(shù)
@middleindex
中間頁的索引

@pagecount
分頁總數(shù)
@lastindex
最后一頁的索引

@recordcount
數(shù)據(jù)表的記錄總數(shù)
@tablename
數(shù)據(jù)庫表名稱

@pageindex
當前頁的索引
@primarykey
主鍵字段名稱

@firstindex
第一頁的索引
@queryfields
要查詢的字段集




變量
定義

@pagecount
(int)math.ceiling((double)@recordcount / @pagesize)

@firstindex
0

@lastindex
@pagecount – 1

@middleindex
(int)math.ceiling((double)@pagecount / 2) – 1




先讓我們看看效率最差的sql語句:



select top @pagesize * from @tablename

where @primarykey not in (

select top @pagesize*@pageindex @primarykey from @tablename

order by @primarykey asc

) order by @primarykey asc




這條sql語句慢就慢在not in這里,主select語句遍歷的每個@primarykey的值都要跟子select語句的結(jié)果集中的每一個@primarykey的值進行比較,這樣時間復雜度非常大。這里不得不提醒一下大家,平時編寫sql語句時應該盡量避免使用not in語句,因為它往往會增加整個sql語句的時間復雜度。



另一種是使用了兩個top和三個order by的sql語句,如下所示:



select * from (

select top @pagesize * from (

select top @pagesize*(@pageindex+1) * from @tablename

order by @primarykey asc

) tablea order by @primarykey desc

) tableb order by @primarykey asc




這條sql語句空間復雜度比較大。如果要顯示的分頁面剛好是最后一頁,那么它的效率比直接select出所有的記錄還要低。因此,對于分頁算法,我們還應該具體情況具體分析,不能一概而論。下面將簡單介紹一下相關(guān)概念,如果您對主鍵和索引非常熟悉,可以直接跳過。



有關(guān)主鍵和索引的概念



在 access中,一個表的主鍵(primary key,又稱主索引)必然是唯一索引(unique index),它的值是不會重復的。除此之外,索引依據(jù)索引列的值進行排序,每個索引記錄包含著一個指向它所引用的數(shù)據(jù)行的指針,這對order by的執(zhí)行非常有幫助。我們可以利用主鍵這兩個特點來實現(xiàn)對某條記錄的定位,從而快速地取出某個分頁上要顯示的記錄。



舉個例子,假設(shè)主鍵字段為integer型,在數(shù)據(jù)庫表中,記錄的索引已經(jīng)按主鍵字段的值升序排好(默認情況下),那么主鍵字段值為“11”的記錄的索引,肯定剛好在值為“12”的記錄的索引前面(假設(shè)數(shù)據(jù)庫表中存在主鍵的值為“12”的記錄)。如果主鍵字段不具備unique約束,數(shù)據(jù)庫表中將有可能存在兩個或兩個以上主鍵字段的值為“11”的記錄,這樣就無法確定這些記錄之間的前后位置了。



下面就讓我們看看如何利用主鍵來進行數(shù)據(jù)的分段查詢吧。



快速分頁法的原理



其實該分頁法是從其他方法衍生而來的。本人對原來的方法認真地分析,發(fā)現(xiàn)通過優(yōu)化和改進可以非常有效地提高它的效率。原算法本身效率很高,但缺乏對具體問題的具體分析。同一個分頁算法,可能在取第一頁的數(shù)據(jù)時效率非常高,但是在取最后一頁的數(shù)據(jù)時可能反而效率更低。



經(jīng)過分析,我們可以把分頁算法的效率狀態(tài)分為四種情況:

(1)@pageindex <= @firstindex

(2)@firstindex < @pageindex <= @middleindex

(3)@middleindex < @pageindex < @lastindex

(4)@pageindex >= @lastindex



狀態(tài)(1)和(4)分別表示第一頁和最后一頁。它們屬于特殊情況,我們不必對其使用特殊算法,直接用top就可以解決了,不然會把問題復雜化,反而降低了效率。對于剩下的兩種狀態(tài),如果分頁總數(shù)為偶數(shù),我們可以看作是從數(shù)據(jù)庫表中刪掉第一頁和最后一頁的記錄,再把剩下的按前后位置平分為兩部分,即前面的一部分,也就是狀態(tài)(2),后面的為另一部分,也就是狀態(tài)(3);如果分頁總數(shù)為奇數(shù),則屬于中間頁面的記錄歸于前面的部分。這四種狀態(tài)分別對應著四組sql語句,每組sql語句由升序和降序兩條sql語句組成。



下面是一個數(shù)據(jù)庫表,左邊第一列是虛擬的,不屬于該數(shù)據(jù)庫表結(jié)構(gòu)的一部分,它表示相應記錄所在的分頁索引。該表將用于接下來的sql語句的舉例中:



pageindex
itemid
productid
price

0
001
0011
$12

002
0011
$13

1
003
0012
$13

004
0012
$11

2
005
0013
$14

006
0013
$12

3
007
0011
$13

008
0012
$15

4
009
0013
$12

010
0013
$11




由表可得:@pagesize = 2,@recordcount = 10,@pagecount = 5



升序的sql語句



(1)@pageindex <= @firstindex



取第一頁的數(shù)據(jù)是再簡單不過了,我們只要用top @pagesize就可以取出第一頁要顯示的記錄了。



select top @pagesize @queryfields

from @tablename

where @condition

order by @primarykey asc




(2)@firstindex < @pageindex <= @middleindex



把取數(shù)據(jù)表前半部分記錄和取后半部分記錄的sql語句分開寫,可以有效地改善性能。后面我再詳細解釋這個原因?,F(xiàn)在看看取前半部分記錄的sql語句。先取出當前頁之前的所有記錄的主鍵值,再從中選出最大值,然后取出主鍵值大于該最大值的前@pagesize條記錄。這里@primarykey的數(shù)據(jù)類型可以不是integer類型,char、varchar等其他類型照樣可以。



select top @pagesize @queryfields

from @tablename

where @primarykey > (

select max(@primarykey) from (

select top @pagesize*@pageindex @primarykey

from @tablename

where @condition

order by @primarykey asc

) tablea

) where @condition

order by @primarykey asc




例如:@pageindex=1,紅-->黃-->藍







(3)@middleindex < @pageindex < @lastindex



接下來看看取數(shù)據(jù)庫表中后半部分記錄的sql語句。該語句跟前面的語句算法的原理是一樣的,只是方法稍微不同。先取出當前頁之后的所有記錄的主鍵值,再從中選出最小值,然后取出主鍵值小于該最小值的前@pagesize條記錄。



select * from (

select top @pagesize @queryfields

from @tablename

where @primarykey < (

select min(@primarykey) from (

select top (@[email protected]*(@pageindex+1)) @primarykey

from @tablename

where @condition

order by @primarykey desc

) tablea

) where @condition

order by @primarykey desc

) tableb

order by @primarykey asc




之所以把取數(shù)據(jù)表前半部分記錄和取后半部分記錄的sql語句分開寫,是因為使用取前半部分記錄的sql語句時,當前頁前面的記錄數(shù)目隨頁數(shù)遞增,而我們還要從這些記錄中取出它們的主鍵字段的值再從中選出最大值。這樣一來,分頁速度將隨著頁數(shù)的增加而減慢。因此我沒有這樣做,而是在當前頁索引大于中間頁索引時(@middleindex < @pageindex)選用了分頁速度隨著頁數(shù)的增加而加快的算法。由此可見,假設(shè)把所有分頁面劃分為前面、中間和后面三部分,則最前面和最后面的分頁速度最快,最中間的分頁速度最慢。



例如:@pageindex=3,紅 --> 黃 --> 藍







(4)@pageindex >= @lastindex



取最后一頁的記錄可以簡單地使用類似狀態(tài)(1)的做法:



select * from (

select top @pagesize @queryfields

from @tablename

where @condition

order by @primarykey desc

) tablea order by @primarykey asc




不過,這樣產(chǎn)生的最后一頁不一定是實際意義上的最后一頁。因為最后一頁的記錄數(shù)未必剛好跟@pagesize相等,而上面的sql語句是直接取得倒數(shù)的@pagesize條記錄。如果想要精確地取得最后一頁的記錄,應該在先計算出該頁的記錄數(shù),作為top語句的條件:



select * from (

select top (@[email protected]*@lastindex) @queryfields

from @tablename where @condition

order by @primarykey desc

) tablea order by @primarykey asc




降序的sql語句



降序的sql語句跟升序的大同小異,這里就不在羅嗦了j



(1)@pageindex <= @firstindex



select top @pagesize @queryfields

from @tablename

where @condition

order by @primarykey desc




(2)@firstindex < @pageindex <= @middleindex



select top @pagesize @queryfields

from @tablename

where @primarykey < (

select min(@primarykey) from (

select top @pagesize*@pageindex @primarykey

from @tablename

where @condition

order by @primarykey desc

) tablea

) where @condition

order by @primarykey desc




(3)@middleindex < @pageindex < @lastindex



select * from (

select top @pagesize @queryfields

from @tablename

where @primarykey > (

select max(@primarykey) from (

select top (@[email protected]*(@pageindex+1)) @primarykey

from @tablename

where @condition

order by @primarykey asc

) tablea

) where @condition

order by @primarykey asc

) tableb order by @primarykey desc




(4)@pageindex >= @lastindex



select * from (

select top (@[email protected]*@lastindex) @queryfields

from @tablename where @condition order by @primarykey asc

) tablea order by @primarykey desc




如何動態(tài)產(chǎn)生上述的sql語句?



看了上面的sql語句之后,相信大家已經(jīng)基本明白該分頁法的原理了。下面,我們將要設(shè)計一個動態(tài)生成sql語句的類fastpaging。該類有一個公有靜態(tài)方法,它根據(jù)您給出的條件動態(tài)生成sql語句,作為方法的返回值。



// 產(chǎn)生根據(jù)指定字段排序并分頁查詢的 select 語句。

public static string paging(

int pagesize, //每頁要顯示的記錄的數(shù)目。

int pageindex, //要顯示的頁的索引。

int recordcount, //數(shù)據(jù)表中的記錄總數(shù)。

string tablename, //要查詢的數(shù)據(jù)表。

string queryfields, //要查詢的字段。

string primarykey, //主鍵字段。

bool ascending, //是否為升序排列。

string condition //查詢的篩選條件。

) {

stringbuilder sb = new stringbuilder();

int pagecount = getpagecount(recordcount,pagesize); //分頁的總數(shù)

int middleindex = getmidpageindex(pagecount); //中間頁的索引

int firstindex = 0; //第一頁的索引

int lastindex = pagecount - 1; //最后一頁的索引



if (pageindex <= firstindex) {

// 代碼略

} else if (pageindex > firstindex && pageindex <= middleindex) {

sb.append("select top ").append(pagesize).append(" ")

.append(queryfields).append(" from ").append(tablename)

.append(" where ").append(primarykey);

if (ascending)

sb.append(" > (").append(" select max(");

else

sb.append(" < (").append(" select min(");

sb.append(primarykey).append(") from ( select top ")

.append(pagesize*pageindex).append(" ").append(primarykey)

.append(" from ").append(tablename);

if (condition != string.empty)

sb.append(" where ").append(condition);

sb.append(" order by ").append(primarykey).append(" ")

.append(getsorttype(ascending)).append(" ) tablea )");

if (condition != string.empty)

sb.append(" and ").append(condition);

sb.append(" order by ").append(primarykey).append(" ")

.append(getsorttype(ascending));

}

else if (pageindex > middleindex && pageindex < lastindex) {

// 代碼略

} else if (pageindex >= lastindex) {

// 代碼略

}

return sb.tostring();

}




除了paging方法還有另外幾個方法:



// 根據(jù)記錄總數(shù)和分頁大小計算分頁數(shù)。

public static int getpagecount(int recordcount, int pagesize) {

return (int)math.ceiling((double)recordcount/pagesize);

}

// 計算中間頁的頁索引。

public static int getmidpageindex(int pagecount) {

return (int)math.ceiling((double)pagecount/2) - 1;

}

// 獲取排序的方式("asc"表示升序,"desc"表示降序)

public static string getsorttype(bool ascending) {

return (ascending ? "asc" : "desc");

}

// 獲取一個布爾值,該值指示排序的方式是否為升序。

public static bool isascending(string ordertype) {

return ((ordertype.toupper() == "desc") ? false : true);

}




讓datagrid工作起來



有了上面的類,實現(xiàn)分頁的工作就簡單多了。首先,我們要將datagrid的allowpaging屬性和allowcustompaging屬性為true,除此之外,為了體現(xiàn)出升序和降序的功能,還需要將allowsorting屬性也設(shè)置為true。然后在每次分頁時,我們需要產(chǎn)生一個oledbdatareader對象或dataview對象綁定到datagrid,作為datagrid的數(shù)據(jù)源。這里需要用fastpaging類的paging方法根據(jù)條件產(chǎn)生一個sql語句,并賦給oledbcommand對象的commandtext屬性:



cmd.commandtext = fastpaging.paging(

datagrid1.pagesize,

(int)viewstate["currentpageindex"],

datagrid1.virtualitemcount,

"items",

"itemid, productid, price",

"itemid",

fastpaging.isascending(ordertype),

""

);




在上面的程序段中,viewstate["currentpageindex"]的值在datagrid的page事件處理程序中被更新為e.newpageindex。為了方便處理viewstate的空值,最好把對viewstate["currentpageindex"]的存取操作和空值判斷封裝在一個屬性里。datagrid1. virtualitemcount應該設(shè)置為數(shù)據(jù)庫表中的記錄總數(shù)。datagrid通過它和pagesize屬性可以虛擬出datagrid的分頁數(shù)。virtualitemcount的值是在page的load事件處理程序中被設(shè)置的,而該值的大小需要經(jīng)過一次數(shù)據(jù)庫訪問才能得到。為了提高性能,可以只在第一次加載頁面的時候設(shè)置該值。



總結(jié)



datagrid基于access的快速分頁法到這里就介紹完了。當然,這種方法并不能“包治百病”,可能對于您的要實現(xiàn)的功能,還有其它更好的方法。這就需要大家在平時工作和學習中不斷總結(jié)經(jīng)驗,在解決實際問題時盡可能找到最有效的方法。這也是本文的方法中所貫穿的思想。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
精品人人人人| 黄色小网站在线观看| 国产精品视频1区| 色就是色欧美色图| 777色狠狠一区二区三区| 91在线观看免费| 91精品一区二区三区四区| 最新中文字幕日本| 精品一区二区国产| 久久久免费观看| 亚洲色成人www永久在线观看| 国产主播喷水一区二区| 欧美四级电影在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 尤蜜粉嫩av国产一区二区三区| 日韩欧美一区二区三区在线| 久久影院资源网| 美女视频黄的免费| 色妞在线综合亚洲欧美| 亚洲国产清纯| 欧美影视一区二区| 久久久久久久影视| 久久精品一区二区三区不卡免费视频| 视频一区二区免费| 国产一区二区三区直播精品电影| 4p变态网欧美系列| 亚洲天堂免费看| 极品视频在线| 熟妇人妻系列aⅴ无码专区友真希| 69av亚洲| 国产亚洲制服色| 在线免费视频你懂得| 亚洲国模精品一区| 国产在线视频在线| 夜夜爽www精品| 日韩精品一区二区在线| 2021国产精品视频| 亚洲福利合集| 国产成人在线一区二区| 日韩一区在线看| 国产极品在线视频| 91视频 - 88av| 欧美日韩久久久久久| 成人免费在线看片| 国产一级不卡毛片| 91肉色超薄丝袜脚交一区二区| 中文字幕在线播放第一页| 国产一线二线三线在线观看| 欧美一级大片免费看| 99热国产精品| 久久视频一区二区| 亚洲成人www| 亚洲国产精品成人综合久久久| 在线免费视频你懂得| 一区二区三区欧美日韩| 91在线无精精品一区二区| 伊人无码高清| 日本黄色福利视频| 国产无遮挡裸体免费久久| 中文字幕2019第三页| 成年人小视频网站| 在线观看视频亚洲| bbbbbbbbbbb在线视频| 亚洲国产精品无码av| 先锋影音av中文字幕| 制服丝袜专区在线| 亚洲少妇屁股交4| 666欧美在线视频| 国产娇喘精品一区二区三区图片| 625成人欧美午夜电影| 99re精彩视频| 国产日产精品一区二区三区| 日韩精品一二三四区| 亚洲视频国产| 91视频最新| 美女扒开大腿让男人桶| bestiality新另类大全| 欧美激情成人在线| 国产精品毛片一区视频播| 亚洲成av人片在线观看香蕉| 91视频观看| 精品人妻无码一区二区色欲产成人| 午夜福制92视频| 日韩五码电影| 亚洲国产激情一区二区三区| 日韩成人中文字幕| 最新中文字幕在线播放| 久久中文久久字幕| 欧美日韩一区二区免费视频| 国产精品嫩草99a| 五月天久久狠狠| 制服诱惑一区二区| 日韩av激情| 亚洲欧美小说国产图片| 国产成人在线视频网址| 狠狠操视频网| 三级三级久久三级久久18| 97人人模人人爽人人喊38tv| 内射一区二区三区| 久久精精品视频| 伊人手机在线| 国产成人在线色| 欧美一级欧美三级| 亚洲一区二区三区四区av| 日本在线中文电影| 尤物在线视频| 国产精品精华液网站| 国产盗摄女厕一区二区三区| 午夜在线一区二区| 国产精品视频网站在线观看| 久久精品视频久久| 久久久久久久麻豆| 97超碰在线视| 一区二区精品国产| 粉嫩粉嫩芽的虎白女18在线视频| 国产高清在线观看免费不卡| 国产+成+人+亚洲欧洲| 亚洲欧美另类在线| 国产高清精品在线| 日本人妻丰满熟妇久久久久久| 精品国产一区二区三区无码| 日韩欧美一区二区在线观看| 国产特级黄色录像| 91视频在线网站| 韩国日本不卡在线| 日韩精品不卡| av成人免费观看| 国产精品免费一区二区三区在线观看| 国产一区二区日韩精品| 亚洲免费看黄网站| 2023国产精品自拍| 亚洲精品久久久久久动漫器材一区| 久久一区二区三区国产精品| 一区二区蜜桃| 成人18精品视频| 国产秀色在线www免费观看| 91精品人妻一区二区三区蜜桃2| 日日干天天草| 久久日免费视频| 亚洲国产精品国自产拍av秋霞| 久久精品国产成人av| 六十路息与子猛烈交尾| 亚洲欧洲另类精品久久综合| 日韩亚洲电影在线| 老司机午夜免费精品视频| 免费观看成人高潮| 特大黑人巨人吊xxxx| 欧美日韩一级片网站| 欧美巨大丰满猛性社交| 亚洲精华国产精华精华液网站| 中文在线天堂网| 欧美高清视频一区二区三区| 欧美国产一区二区在线| 亚洲国产精品日韩专区av有中文| 九九九伊在线综合永久| 免费又黄又爽又猛大片午夜| 国产在线xxxx| 91色国产在线| 91亚洲午夜精品久久久久久| 亚洲天堂网在线观看视频| 国产精品久久久久久久久久久不卡| 久久久精品蜜桃| 精品国产一区二区三区av性色| 久久亚洲免费| 天堂网在线.www天堂在线| 97精品久久久午夜一区二区三区| 国产精品视频免费在线观看| 五月婷婷激情视频| www.99色.com| 欧洲亚洲免费在线| 国产一区二区免费看| 国产91免费看片| 国产精品三级久久久久久电影| 西西大胆午夜视频| 国产日韩在线看片| 欧美福利视频网站| 添女人荫蒂视频| 欧美影院一区二区| 天堂√中文在线| 久久久久se| 日韩免费观看网站| 另类的小说在线视频另类成人小视频在线| 性色88av老女人视频| 欧美视频官网| 国产美女网站视频| 欧美日韩一区在线观看| 亚洲青青久久| 在线欧美小视频| 91蝌蚪精品视频| 欧美激情在线免费| 日韩女同互慰一区二区| 91美女在线视频| 久久精品女同亚洲女同13| 中文字幕亚洲一区二区av在线| 91久久久久久久| av电影在线地址| 精品欧美一区二区三区| 日本在线免费中文字幕| 夜夜操 天天摸| 亚洲私拍自拍| 在线看av的网址| 国产一区亚洲| 国产福利一区二区三区视频| 成人在线视频一区二区| 精品久久久99| 黄色一级在线视频| 久久99久久久久久| 色呦呦在线资源| 精品国产福利| 精品日韩欧美在线| 欧美国产乱视频| 国产日韩欧美91| 亚洲图片在区色| 日本成人黄色免费看| 91国内精品白嫩初高生| 91视频观看视频| 96成人在线视频| 青娱乐在线视频观看| 99久久精品国产一区二区小说| 欧美激情综合网| 伊人网在线视频观看| 国产久草在线| 国产a√精品区二区三区四区| www黄色在线观看| 亚洲一级在线观看| 天天做天天爱天天爽综合网| 欧美日韩怡红院| 成人图片小说| 久久影院理伦片| 免费日本黄色| 成人在线视频免费观看| 国产永久免费网站| 曰本女人与公拘交酡| 国产 日韩 欧美一区| 国产不卡av一区二区| 思热99re视热频这里只精品| 国产精品久久久久久久岛一牛影视| 在线播放av中文字幕| 国产精品第十页| 午夜黄色福利视频| 97久久精品人人做人人爽50路| 日韩激情视频一区二区| 美女写真理伦片在线看| 91久久国产最好的精华液| jizzjizzjizzjizzjizzjizzjizz| 亚洲欧美综合国产精品一区| 黑人巨大40cm重口| 欧美日韩国产亚洲一区| 2022成人影院| av观看免费| 国产亚洲亚洲国产一二区| 久久精品国产一区二区电影| 性少妇videosexfreexxx片| 国产性猛交xx乱| 无码日韩精品一区二区免费| av先锋影院| 在线看的你懂得| 精品系列免费在线观看| 四虎影视在线播放| 亚洲女性喷水在线观看一区| 99高清免费国产自产拍| 国产美女福利在线观看| 激情视频在线观看| 夜夜爽妓女8888视频免费观看| www国产成人| 国产精品精品国产一区二区| 久久久久久久久爱| 精品久久久久久| 综合激情久久| zzzwww在线看片免费| 欧美日韩大陆一区二区| 日韩午夜电影| 国产亚洲精品福利| 欧美一区二区三区喷汁尤物| 日本在线播放一区| 久久久综合久久| 欧美激情一区二区三区在线视频| 国产精品高潮呻吟久久av黑人| 无码人妻丰满熟妇精品| 人妻丰满熟妇av无码区app| 国产午夜精品一区二区三区四区| 777米奇影视第四色| 国产精品免费视频一区二区| 欧美色视频日本版| 黄色片在线免费看| 久久国产露脸精品国产| 户外露出精品视频国产| 鲁一鲁一鲁一鲁一av| h视频在线观看免费网站| 精品动漫3d一区二区三区免费| 国产激情美女久久久久久吹潮| 国产一级大片免费看| 久久久久亚洲AV成人网人人小说| free欧美| 欧美日韩在线播放一区二区| igao视频网在线视频| 欧美在线亚洲一区| 在线看黄的网站| 美日韩在线观看| 一区二区三区在线免费播放| 顶级网黄在线播放| 色偷偷av一区二区三区乱| 美洲精品一卡2卡三卡4卡四卡| 欧美日韩在线免费| 国产精品vvv| 成人网站免费观看入口| 韩国理伦片一区二区三区在线播放| 999久久久亚洲| 无码人妻一区二区三区免费n鬼沢| 一区二区三区毛片| 亚洲激情在线播放| 欧美91福利在线观看| 91精品视频播放| 久久亚洲精品国产| 亚洲精品成人久久| 午夜精品久久久久久久久久久| 99热这里只有精品99| 九九热在线精品视频| 中文字幕日韩欧美一区二区三区| 国产免费看av| 久久久久久久久久久免费| 中文精品一区二区| 色婷婷视频在线观看| 久久亚洲精品无码va白人极品| 中文字幕第38页| 欧美黄页在线免费观看| 日本三级电影在线播放| 奇米影视第四狠狠777|