婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列

在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列

熱門(mén)標(biāo)簽:400電話辦理怎么樣 外呼電話機(jī)器人成本 西寧呼叫中心外呼系統(tǒng)線路商 地圖標(biāo)注軟件免費(fèi)下載 百應(yīng)電話機(jī)器人外呼系統(tǒng) 聯(lián)通官網(wǎng)400電話辦理 臨沂智能電話機(jī)器人加盟 蘇州如何辦理400電話 網(wǎng)絡(luò)電話外呼系統(tǒng)上海

導(dǎo)言:

  當(dāng)向類(lèi)型化的數(shù)據(jù)集(Typed DataSet)添加一個(gè)TableAdapter時(shí),相應(yīng)的DataTable的構(gòu)架已經(jīng)由TableAdapter的主查詢(xún)定義好了.比如,如果主查詢(xún)返回A, B,C這3個(gè)域,那么 DataTable將有對(duì)應(yīng)的3個(gè)列A, B,和C.除了主查詢(xún)以外,TableAdapter還可以包含其他的查詢(xún),可能是返回基于某些參數(shù)的數(shù)據(jù)。比如,ProductsTableAdapter的主查詢(xún)返回所有產(chǎn)品的信息,此外,ProductsTableAdapter還包含諸如GetProductsByCategoryID(categoryID) 和 GetProductByProductID(productID)的方法,它們根據(jù)指派的參數(shù)返回特定的產(chǎn)品信息.

  如果TableAdapter的方法返回的列涵蓋在主查詢(xún)里,工作起來(lái)沒(méi)有問(wèn)題。但如果返回的列并沒(méi)有涵蓋在主查詢(xún),那么我們就需要對(duì)DataTable的構(gòu)架進(jìn)行擴(kuò)充.在第35章《使用Repeater和DataList單頁(yè)面實(shí)現(xiàn)主/從報(bào)表》里,我們向CategoriesTableAdapter添加方法以返回 CategoryID, CategoryName, Description和NumberOfProducts列。其中前3列是涵蓋在主查詢(xún)里的,而NumberOfProducts列沒(méi)有在主查詢(xún)里定義,它返回的是每個(gè)category相關(guān)產(chǎn)品的數(shù)目.我們可以向CategoriesDataTable手工添加一列,以便于統(tǒng)計(jì)從新方法返回的NumberOfProducts列的值.

  在第52章《使用FileUpload上傳文件》我們探討過(guò),對(duì)使用ad-hoc SQL statements構(gòu)建且其方法返回的列超出主查詢(xún)范圍的TableAdapters必須多加留意.因?yàn)橐坏┲匦逻\(yùn)行設(shè)置向?qū)У脑挘鼘?duì)TableAdapter的方法進(jìn)行更新,使其返回的列與主查詢(xún)相匹配.不過(guò)如果使用存儲(chǔ)過(guò)程的話就不會(huì)出現(xiàn)這種情況.

  在本文我們將考察如何擴(kuò)展DataTable的構(gòu)架以包含額外的列。我們都知道使用ad-hoc SQL statements構(gòu)架的TableAdapter不穩(wěn)定,本文我們將用存儲(chǔ)過(guò)程來(lái)構(gòu)架.你可以參考第65章《在TableAdapters中創(chuàng)建新的存儲(chǔ)過(guò)程》和第66章《在TableAdapters中使用現(xiàn)有的存儲(chǔ)過(guò)程》來(lái)獲取設(shè)置TableAdapter使用存儲(chǔ)過(guò)程的更多信息.

第一步:向ProductsDataTable添加一個(gè)PriceQuartile列

  在第67章里我們創(chuàng)建了一個(gè)名為NorthwindWithSprocs的類(lèi)型化的數(shù)據(jù)集.該數(shù)據(jù)集目前包含2個(gè)DataTables:ProductsDataTable以及 EmployeesDataTable。其中ProductsTableAdapter包含3個(gè)方法:

.GetProducts——主查詢(xún),返回Products表的所有記錄
.GetProductsByCategoryID(categoryID)——根據(jù)指定的categoryID值返回所有產(chǎn)品
.GetProductByProductID(productID)——根據(jù)指定的productID值返回所有的產(chǎn)品

  主查詢(xún)及另外2個(gè)方法都返回相同的數(shù)據(jù)列,也就是Products表的所有列,并沒(méi)有返回Categories 以及Suppliers表的相關(guān)數(shù)據(jù).

  在本文,我們將向ProductsTableAdapter添加一個(gè)名為GetProductsWithPriceQuartile 的方法,它返回所有的產(chǎn)品.除了標(biāo)準(zhǔn)的數(shù)據(jù)列外,它還返回PriceQuartile列,它用四分位數(shù)來(lái)衡量產(chǎn)品價(jià)格下跌程度.如果產(chǎn)品價(jià)格上升了25%,那么其值為1,如果下降為25%,那么其值為4.在我們創(chuàng)建一個(gè)存儲(chǔ)過(guò)程來(lái)返回這種信息之前,我們首先需要更新ProductsDataTable,新添一列來(lái)包含GetProductsWithPriceQuartile方法返回的 PriceQuartile值.

  打開(kāi)NorthwindWithSprocs數(shù)據(jù)集,在ProductsDataTable上右鍵單擊,選擇“ Add” ,再選擇“Column”.


圖1:向ProductsDataTable新添一列

  這將向DataTable新添一列,名為“Column1”,類(lèi)型為System.String.我們需要將該列的名稱(chēng)改為“PriceQuartile”,類(lèi)型改為System.Int32,因?yàn)樗闹到橛?到4之間.在ProductsDataTable 選中我們新添加的列,在屬性窗口里設(shè)置其N(xiāo)ame屬性為 “PriceQuartile”,DataType屬性為System.Int32.


圖2:設(shè)置該新列的Name 和 DataType屬性

  就像圖2所示,我們還可以設(shè)置其它的屬性.比如,是否該列的值必須為unique;如果該列為自增列,其值是否允許為NULL等等.不過(guò)我們這里使用其默認(rèn)值.

第二步:創(chuàng)建GetProductsWithPriceQuartile方法

  現(xiàn)在我們已經(jīng)對(duì)ProductsDataTable進(jìn)行了更新以包含PriceQuartile列,我們將要?jiǎng)?chuàng)建一個(gè)GetProductsWithPriceQuartile方法.在TableAdapter上單擊右鍵,再選擇“Add Query”.這將開(kāi)啟TableAdapter查詢(xún)?cè)O(shè)置向?qū)В紫仍?xún)問(wèn)我們是使用ad-hoc SQL statements還是使用現(xiàn)有的存儲(chǔ)過(guò)程或新建一個(gè)存儲(chǔ)過(guò)程.我們選擇“Create new stored procedure”,再點(diǎn)Next.


圖3:在TableAdapter向?qū)Ю飫?chuàng)建新的存儲(chǔ)過(guò)程

  接下來(lái),如圖4所示,向?qū)г?xún)問(wèn)我們添加的是那種類(lèi)型的查詢(xún),由于GetProductsWithPriceQuartile方法將返回Products表的所有記錄以及所有列,我們選擇“SELECT which returns rows”項(xiàng),再點(diǎn)Next.


圖4:查詢(xún)將是一個(gè)返回多個(gè)行的SELECT Statement

接下來(lái),我們?cè)谙驅(qū)Ю镦I入如下的查詢(xún):

SELECT ProductID, ProductName, SupplierID, CategoryID,
 QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
 ReorderLevel, Discontinued,
 NTILE(4) OVER (ORDER BY UnitPrice DESC) as PriceQuartile
FROM Products

  上述查詢(xún)使用了SQL Server 2005新增的NTILE function函數(shù),它將結(jié)果劃分為4組,將UnitPrice值按降序分組.

  不幸的是,查詢(xún)構(gòu)造器(Query Builder)不能解析關(guān)鍵字OVER,并拋出一個(gè)錯(cuò)誤信息。因此,直接在向?qū)У奈谋究蚶镦I入上述代碼,而不要使用查詢(xún)構(gòu)造器.

  注意:關(guān)于NTILE以及SQL Server 2005的其它函數(shù)的更多信息,你可參閱文章《Returning Ranked Results with Microsoft SQL Server 2005》(http://www.4guysfromrolla.com/webtech/010406-1.shtml)以及SQL Server 2005 Books Online的《Ranking Functions section》部分(http://msdn2.microsoft.com/en-us/library/ms189798.aspx)

  完成后,點(diǎn)Next, 向?qū)⒁覀優(yōu)樾麓鎯?chǔ)過(guò)程重命名,我們?nèi)∶麨镻roducts_SelectWithPriceQuartile再點(diǎn)Next.


圖5:將新存儲(chǔ)過(guò)程命名為Products_SelectWithPriceQuartile

  最后我們要為T(mén)ableAdapter的方法命名,選中“Fill a DataTable” 和 “Return a DataTable”兩項(xiàng),并重命名為 FillWithPriceQuartile 和GetProductsWithPriceQuartile.


圖6:對(duì)TableAdapter的方法命名并點(diǎn)Finish

  當(dāng)指定了SELECT查詢(xún),并對(duì)存儲(chǔ)過(guò)程和TableAdapter的方法命名后,點(diǎn)Finish完成向?qū)А_@時(shí)你將看到1到2條警告信息,說(shuō)“The OVER SQL construct or statement is not supported.” 不必理會(huì)它.

  完成向?qū)Ш螅揟ableAdapter將會(huì)包含F(xiàn)illWithPriceQuartile 和GetProductsWithPriceQuartile方法,并且數(shù)據(jù)庫(kù)將包含一個(gè)名為Products_SelectWithPriceQuartile的存儲(chǔ)過(guò)程。花點(diǎn)時(shí)間來(lái)驗(yàn)證一下,檢查數(shù)據(jù)庫(kù),如果你沒(méi)有看到我們剛添加的存儲(chǔ)過(guò)程,在存儲(chǔ)過(guò)程文件夾上右鍵單擊,選“刷新”.


圖7:驗(yàn)證新方法是否添加到TableAdapter


圖8:確保數(shù)據(jù)庫(kù)包含Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程

  注意:使用存儲(chǔ)過(guò)程來(lái)替換ad-hoc SQL statements的好處之一是重新運(yùn)行TableAdapter設(shè)置向?qū)У脑挷⒉粫?huì)改動(dòng)存儲(chǔ)過(guò)程返回的列.我們可以作一個(gè)驗(yàn)證,在TableAdapter上右鍵單擊,選“Configure”項(xiàng),以啟動(dòng)向?qū)В缓簏c(diǎn)Finish完成向?qū)А=酉聛?lái),我們?cè)跀?shù)據(jù)庫(kù)里查看Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程.我們注意到其返回的列并沒(méi)有發(fā)生變化.如果我們使用的是ad-hoc SQL statements的話,重新運(yùn)行向?qū)?huì)使查詢(xún)返回的列與主查詢(xún)的列相匹配,因此它將把GetProductsWithPriceQuartile方法里使用的查詢(xún)里的NTILE statement刪除掉.

  當(dāng)調(diào)用數(shù)據(jù)訪問(wèn)層的GetProductsWithPriceQuartile方法時(shí),TableAdapter將執(zhí)Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程,并為返回的每條記錄向ProductsDataTable添加對(duì)應(yīng)的row.存儲(chǔ)過(guò)程返回的數(shù)據(jù)域(data fields)將映射到ProductsDataTable的列.因?yàn)樵摯鎯?chǔ)過(guò)程要返回一個(gè)PriceQuartile數(shù)據(jù)域,所以它的值將分配給ProductsDataTable的PriceQuartile列.

  對(duì)于那些不返回PriceQuartile數(shù)據(jù)域的方法而言,PriceQuartile列的值由其DefaultValue屬性指定. 如圖2所示,該默認(rèn)值為DBNull。如果你想指定為其他值,僅僅改動(dòng)DefaultValue屬性即可,但一定要是一個(gè)有效的值(比如,PriceQuartile列的值一定要是一個(gè)System.Int32類(lèi)型的值).

  現(xiàn)在我們完成了向DataTable添加額外列的必要的步驟,接下來(lái)我們要?jiǎng)?chuàng)建一個(gè)ASP.NET 頁(yè)面來(lái)展示每個(gè)產(chǎn)品的 name, price,以及price quartile.不過(guò)我們要先對(duì)業(yè)務(wù)邏輯層進(jìn)行更新,以包含一個(gè)方法來(lái)調(diào)用數(shù)據(jù)訪問(wèn)層的GetProductsWithPriceQuartile方法.我們將在第3步更新業(yè)務(wù)邏輯層,在第4步創(chuàng)建一個(gè)ASP.NET頁(yè)面.

第三步:更新業(yè)務(wù)邏輯層

  我們?cè)诒憩F(xiàn)層調(diào)用新添加的GetProductsWithPriceQuartile方法以前,必須在業(yè)務(wù)邏輯層添加相應(yīng)的方法,打開(kāi)ProductsBLLWithSprocs class類(lèi)文件,添加如下的代碼:

[System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetProductsWithPriceQuartile()
{
 return Adapter.GetProductsWithPriceQuartile();
}

  就像其它方法一樣,GetProductsWithPriceQuartile僅僅調(diào)用數(shù)據(jù)訪問(wèn)層對(duì)應(yīng)的GetProductsWithPriceQuartile方法并返回其結(jié)果.

第四步:在一個(gè)ASP.NET頁(yè)面展示Price Quartile信息

  完成對(duì)業(yè)務(wù)邏輯層的修改后,我們將創(chuàng)建一個(gè)ASP.NET頁(yè)面來(lái)顯示每個(gè)產(chǎn)品的price quartile信息.打開(kāi)AdvancedDAL文件夾里的AddingColumns.aspx頁(yè)面,從工具箱拖一個(gè) GridView控件到頁(yè)面,設(shè)置其ID為Products.在其智能標(biāo)簽里將其綁定到一個(gè)名為ProductsDataSource的新的ObjectDataSource控件,設(shè)置該控件調(diào)用ProductsBLLWithSprocs class類(lèi)的GetProductsWithPriceQuartile方法,在UPDATE, INSERT,和DELETE標(biāo)簽里選“(None)”.


圖9:設(shè)置ObjectDataSource調(diào)用ProductsBLLWithSprocs類(lèi)


圖10:調(diào)用GetProductsWithPriceQuartile方法獲取產(chǎn)品信息

  完成設(shè)置向?qū)Ш螅?Visual Studio會(huì)為GridView添加BoundField或CheckBoxField列,其中包括PriceQuartile列. 將ProductName, UnitPrice,PriceQuartile以外的列全部刪除,設(shè)置UnitPrice列為貨幣格式.并將UnitPrice 和 PriceQuartile列放在右邊,居中。 最后分別將這3列的HeaderText屬性設(shè)置為“Product”, “Price”,“Price Quartile”。同時(shí)啟用GridView控件的排序功能.

  作上述修改后, GridView 和 ObjectDataSource控件的聲明代碼看起來(lái)和下面的差不多:

asp:GridView ID="Products" runat="server" AllowSorting="True"
 AutoGenerateColumns="False" DataKeyNames="ProductID"
 DataSourceID="ProductsDataSource">
 Columns>
 asp:BoundField DataField="ProductName" HeaderText="Product"
  SortExpression="ProductName" />
 asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}"
  HeaderText="Price" HtmlEncode="False"
  SortExpression="UnitPrice">
  ItemStyle HorizontalAlign="Right" />
 /asp:BoundField>
 asp:BoundField DataField="PriceQuartile" HeaderText="Price Quartile"
  SortExpression="PriceQuartile">
  ItemStyle HorizontalAlign="Center" />
 /asp:BoundField>
 /Columns>
/asp:GridView>

asp:ObjectDataSource ID="ProductsDataSource" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetProductsWithPriceQuartile"
 TypeName="ProductsBLLWithSprocs">
/asp:ObjectDataSource>

  如圖11為在瀏覽器里登錄該頁(yè)面的情況,我們注意到,最開(kāi)始產(chǎn)品按price的降序排列,同時(shí)每個(gè)產(chǎn)品都有相應(yīng)的PriceQuartile值,當(dāng)然這些數(shù)據(jù)也可以按其它標(biāo)準(zhǔn)來(lái)排序,如圖12所示。


圖11:產(chǎn)品按Prices來(lái)排序


圖12:產(chǎn)品按名稱(chēng)來(lái)排序.

  注意:只需要很少的代碼,我們就可以根據(jù)每行PriceQuartile值的不同而顯示不同的顏色,比如對(duì)值為1的行顯示為淺綠色,對(duì)值為2的行顯示為淺黃色,以此類(lèi)推.你可以花點(diǎn)時(shí)間來(lái)實(shí)現(xiàn)該功能,如果有必要的話,你可以參閱第11章《基于數(shù)據(jù)的自定義格式化》

另一種途徑——?jiǎng)?chuàng)建另一個(gè)TableAdapter

  正如我們?cè)诒疚目吹降模?dāng)向TableAdapter添加的方法返回的列超出了主查詢(xún)范圍的時(shí)候,我們可以向DataTable添加相應(yīng)的列即可.對(duì)TableAdapter而言,如果當(dāng)其包含的返回“額外列”的方法較少且“額外列”不是很多的時(shí)候,這種途徑才能正常工作。

  除了往DataTable添加列以外,我們還可以對(duì)DataSet添加另外的TableAdapter,其包含的方法就是那些需要返回“額外列”的方法.就本問(wèn)而言,我們可以向DataSet添加另一個(gè)名為ProductsWithPriceQuartileTableAdapter的TableAdapter,它將Products_SelectWithPriceQuartile存儲(chǔ)過(guò)程作為它的主查詢(xún),對(duì)要獲取price quartile信息的ASP.NET頁(yè)面來(lái)說(shuō),只需調(diào)用 ProductsWithPriceQuartileTableAdapter即可;而不需要獲取price quartile信息的頁(yè)面只需要調(diào)用ProductsTableAdapter即可.

  這種另外新添加的TableAdapters可能導(dǎo)致某些功(functionality)、作業(yè)(task)重復(fù).比如,如果那些展示PriceQuartile列的頁(yè)面也要啟用insert, update,delete功能的話,那么就要對(duì)ProductsWithPriceQuartileTableAdapter的InsertCommand, UpdateCommand,DeleteCommand屬性進(jìn)行適當(dāng)?shù)脑O(shè)置.而我們已經(jīng)對(duì)ProductsTableAdapter的這3個(gè)屬性進(jìn)行過(guò)設(shè)置了,這時(shí)就有2種方法來(lái)對(duì)數(shù)據(jù)庫(kù)里的產(chǎn)品進(jìn)行添加、更新、刪除操作了——使用ProductsTableAdapter類(lèi)或 ProductsWithPriceQuartileTableAdapter類(lèi).

  本文供下載的代碼里,在NorthwindWithSprocs數(shù)據(jù)集里包含了ProductsWithPriceQuartileTableAdapter class類(lèi),演示了這2種方法.

總結(jié):

  在大多數(shù)情況下,TableAdapter的所有方法返回的數(shù)據(jù)列都是相同的,但有極少數(shù)方法會(huì)返回主查詢(xún)沒(méi)有包含的“額外列”.比如我們?cè)诘?5章《使用Repeater和DataList單頁(yè)面實(shí)現(xiàn)主/從報(bào)表》里,我們向CategoriesTableAdapter添加了一個(gè)方法,該方法除了返回主查詢(xún)里的列外,還返回了一個(gè)NumberOfProducts列.而在本文,我們考察類(lèi)了向 ProductsTableAdapter 添加一個(gè)方法以返回一個(gè)沒(méi)有包含在主查詢(xún)里的PriceQuartile列.對(duì)這種返回來(lái)的“額外列”,我們需要向DataTable添加一個(gè)對(duì)應(yīng)的列.

  如果你打算手工向DataTable添加列,我們建議一使用存儲(chǔ)過(guò)程.如果用ad-hoc SQL statements的話,任何時(shí)候只要重新運(yùn)行TableAdapter設(shè)置向?qū)В脩?hù)所做的所有定制都要被覆蓋.而用存儲(chǔ)過(guò)程的話就不會(huì)出現(xiàn)這種情況.

  祝編程快樂(lè)!

作者簡(jiǎn)介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書(shū),是4GuysFromRolla.com的創(chuàng)始人,自1998年以來(lái)一直應(yīng)用 微軟Web技術(shù)。大家可以點(diǎn)擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對(duì)大家的學(xué)習(xí)ASP.NET有所幫助。

您可能感興趣的文章:
  • ASP.NET中DataTable與DataSet之間的轉(zhuǎn)換示例
  • Asp.net中DataTable導(dǎo)出到Excel的方法介紹
  • asp.net 讀取Excel數(shù)據(jù)到DataTable的代碼
  • ASP.NET DataTable去掉重復(fù)行的2種方法
  • Asp.net實(shí)現(xiàn)選擇性的保留DataTable中的列
  • ASP.NET中實(shí)現(xiàn)根據(jù)匿名類(lèi)、datatable、sql生成實(shí)體類(lèi)
  • asp.net實(shí)現(xiàn)數(shù)據(jù)從DataTable導(dǎo)入到Excel文件并創(chuàng)建表的方法
  • asp.net使用DataTable構(gòu)造Json字符串的方法
  • asp.net異步獲取datatable并顯示的實(shí)現(xiàn)方法
  • asp.net DataTable相關(guān)操作集錦(篩選,取前N條數(shù)據(jù),去重復(fù)行,獲取指定列數(shù)據(jù)等)

標(biāo)簽:清遠(yuǎn) 聊城 慶陽(yáng) 臨夏 中衛(wèi) 海西 甘肅

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    肉肉av福利一精品导航| 五月激情综合色| 亚洲婷婷综合色高清在线| 亚洲精选免费视频| 欧美日韩免费在线视频| 色视频欧美一区二区三区| 日韩高清在线不卡| 日韩一区二区高清| 国产精品免费视频网站| 亚洲视频免费观看| 欧美精品丝袜久久久中文字幕| 亚洲成人一区二区| 久久亚洲综合色| 久国产精品韩国三级视频| 日本欧美久久久久免费播放网| 国产精品第13页| 久久免费美女视频| 天天av天天翘天天综合网 | 91激情在线视频| 欧美日韩国产影片| 国产日韩成人精品| 久久网这里都是精品| 99麻豆久久久国产精品免费| 欧美电影免费观看高清完整版在线 | av不卡在线播放| 91啪亚洲精品| 91精品国产乱| 日本一区二区三区电影| 蜜臀av亚洲一区中文字幕| 久久免费看少妇高潮| 国产在线播精品第三| 日韩一区二区在线观看| 欧美激情在线一区二区三区| 日本一区二区三区高清不卡| 亚洲一区在线播放| 成人激情视频网站| 欧美精品少妇一区二区三区| 亚洲成人在线观看视频| 色婷婷av一区二区三区软件 | 91.com视频| 在线影院国内精品| 国产成人精品免费| 国产成人在线网站| 国产夫妻精品视频| 亚洲国产日日夜夜| 亚洲欧美日韩一区二区| 免费亚洲电影在线| 免费xxxx性欧美18vr| 另类小说一区二区三区| 91亚洲国产成人精品一区二区三 | 韩国精品免费视频| 国产乱码精品一区二区三区av| 国产在线视频不卡二| 久久精品一级爱片| 欧美激情一区二区三区全黄| 欧美国产丝袜视频| 久久精品国内一区二区三区| 国产宾馆实践打屁股91| 不卡av在线免费观看| 欧美日韩精品二区第二页| 国产女人18水真多18精品一级做| 亚洲三级电影全部在线观看高清| 天天av天天翘天天综合网 | 久久综合九色综合欧美98 | 欧美激情在线一区二区| 一区二区三区四区乱视频| 国产一区二区三区观看| 91视频你懂的| 26uuuu精品一区二区| 午夜精品久久久久久久久| 国产精品456露脸| 色妞www精品视频| 国产欧美综合在线观看第十页| 亚洲三级理论片| 国产成人免费视频| 91精品国产91久久综合桃花| 亚洲女同女同女同女同女同69| 免播放器亚洲一区| 欧美日韩国产综合久久 | 8x8x8国产精品| 国产精品欧美经典| 日韩欧美中文一区二区| 亚洲午夜羞羞片| 波多野结衣欧美| 亚洲老妇xxxxxx| 国产精品一区二区免费不卡| 制服丝袜成人动漫| 久久国产人妖系列| 欧美高清视频www夜色资源网| 中文字幕免费不卡在线| 91麻豆国产福利在线观看| 久久老女人爱爱| 日本欧美久久久久免费播放网| 日韩一区二区三区四区五区六区| 一区在线播放视频| 成人黄色综合网站| 亚洲综合视频在线观看| eeuss鲁片一区二区三区| 欧美精品一区二区三区很污很色的| 精品在线一区二区三区| 欧美日韩午夜在线| 午夜国产精品影院在线观看| 日韩精品最新网址| 天堂va蜜桃一区二区三区 | 天堂成人免费av电影一区| 奇米亚洲午夜久久精品| 欧美日免费三级在线| 亚洲精品美国一| 在线观看欧美黄色| 亚洲综合色网站| 91电影在线观看| 亚洲第一综合色| 一本色道久久综合亚洲91| 欧美大片拔萝卜| 麻豆91免费观看| 欧美在线一二三| 日韩精品欧美成人高清一区二区| 日韩一级欧美一级| 国产一区二区三区美女| 日本一区二区三区在线不卡| 成人av网址在线| 亚洲福中文字幕伊人影院| 久久电影网电视剧免费观看| 国产精品入口麻豆原神| 91免费看片在线观看| 亚洲欧洲日韩女同| 日韩欧美国产麻豆| 国产一区二区女| 日本乱人伦一区| 日本免费在线视频不卡一不卡二 | 在线一区二区三区四区五区| 国产一区二区三区国产| 国产精品久久久久一区二区三区共| 91浏览器在线视频| 国产福利91精品一区二区三区| 亚洲欧洲www| 91麻豆精品国产91久久久更新时间| 成人黄色软件下载| 午夜成人免费电影| 在线观看国产91| 成人免费av在线| 日日摸夜夜添夜夜添精品视频| 99久久精品国产毛片| 麻豆精品一区二区| 亚洲欧美色图小说| 久久视频一区二区| 在线视频国产一区| 国内精品国产成人国产三级粉色 | 久久婷婷色综合| 在线视频欧美精品| 色欧美乱欧美15图片| 国产91精品入口| 五月激情综合网| 亚洲成av人片一区二区梦乃| 国产网站一区二区| 日韩一区二区三免费高清| 欧美丰满嫩嫩电影| 91色porny| 亚洲久本草在线中文字幕| 欧美激情在线一区二区三区| 5月丁香婷婷综合| 欧日韩精品视频| 99久久99久久免费精品蜜臀| 久久99精品国产.久久久久久| 亚洲一本大道在线| 亚洲日本免费电影| 亚洲一区在线观看网站| 国产精品久久久久久久久图文区 | 91精品中文字幕一区二区三区| 色婷婷亚洲综合| 91在线视频在线| youjizz国产精品| 欧美午夜精品久久久久久孕妇| 91影视在线播放| 亚洲精品五月天| 亚洲影视在线观看| 中文无字幕一区二区三区| 久久只精品国产| 日韩欧美国产综合在线一区二区三区| 91丨九色丨尤物| 色综合网色综合| 欧美日韩国产综合一区二区三区| 色8久久人人97超碰香蕉987| 在线免费观看视频一区| 日韩一区二区电影在线| 欧美不卡在线视频| 久久久久9999亚洲精品| 亚洲精品免费一二三区| 亚洲国产美女搞黄色| 亚洲精品久久久蜜桃| 久久精品国产精品青草| 国产一区二区三区国产| 欧美午夜片在线观看| 91精品国模一区二区三区| 日韩限制级电影在线观看| 国产精品毛片高清在线完整版| 亚洲婷婷在线视频| 日韩理论片在线| 国产精品影视在线观看| caoporen国产精品视频|