3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【转】 ADO.NET最佳实践

發布時間:2023/12/10 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】 ADO.NET最佳实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自:http://blog.csdn.net/spidertan/archive/2003/12/13/17110.aspx????
??? 概述:

??? 本文在微軟站點資源的基礎上加工整理而成,意在介紹在你的ADO.NET應用程序中執行和完成性能優化、穩定性和功能性方面提供最佳的解決方案;同時也包含在ADO.NET中運用已有的數據對象進行開發的最佳實踐和幫助你怎樣設計ADO.NET應用程序提供建議。

??? 本文包含以下內容:

??? 1..NET框架中的data providers;

??? 2.對照DataSet和DataReader,分別介紹他們的最佳用途;

??? 3.如何使用DataSet、Commands和Connections;

??? 4.結合XML;

??? 5.如果你是ADO程序員,也不妨看看ADO.NET與ADO的區別和聯系;

??? 6.結合一些FAQ,更深一步討論ADO.NET觀點和使用技巧。

??? 介紹:

??? A..NET框架中的data providers

??????? Data providers在應用程序和數據庫之間扮演一個橋梁的角色,它使得你可以從一個數據庫返回查詢結果、執行命令以及對數據集的更新等。

??? B.幾種data provider的介紹

??????? 下面表格中數據表明各種data provider以及最佳適用數據庫對象

提供者

描述

SQL Server.NET Data Provider

在.NET框架中使用System.Data.SqlClient命名空間;

建議在中間層應用程序中使用SQL Server7.0或以后版本;

建議在獨立的應用程序中使用MSDE或SQL Server7.0或更高版本;

SQL Server6.5或更早版本,必須使用OLE DB.NET Data Provider中的OLE DB Provider For SQL Server。

OLE DB.NET Data Provider

在.NET框架中使用System.Data.OleDb命名空間;

建議在中間層應用程序中使用SQL Server6.5或以前版本,或者任何在.NET框架SDK中指出的支持OLE DB接口清單的OLE DB Provider,OLE DB接口清單將在后面列出;

建議在獨立的應用程序中使用Access,中間層應用程序不建議使用Access;

不再支持為ODBC的OLE DB Provider,要訪問ODBC,使用ODBC.NET Data Provider。

ODBC.NET Data Provider

在.NET框架中使用System.Data.Odbc命名空間;

提供對使用ODBC驅動連接的數據庫的訪問;

.NET Data Provider For Oracle

在.NET框架中使用System.Data.OracleClient命名空間;

提供對Oracle數據庫的訪問。

Custom.NET Data Provider

提供一套接口,讓你可以自定義一個Data Provider;

SQLXML Managed Classes

包含SQLXML Managed Classes的最新版SQLXML3.0,使得你可以訪問SQL Server2000或以后版本的XML功能性擴展,比如執行XML模板文件、執行XPath查詢和使用Updategrams或Diffgrams更新數據等;在SQLXML 3.0中存儲過程和XML模板將會通過SOAP作為一種WEB服務。

??????? 表格中提到的OLE DB接口清單,在這里把它列出

OLE DB 對象

接口

OLE DB Services

IdataInitilize

DataSource

IDBInitialize
IDBCreateSession
IDBProperties
IPersist
IDBInfo*

Session

ISessionProperties
IOpenRowset
IDBSchemaRowset*
ITransactionLocal*
IDBCreateCommand*

Command

IcommandText
ICommandProperties
ICommandWithParameters*
IAccessor (only required if ICommandWithParameters is supported)
ICommandPrepare*

MultipleResults

ImultipleResults

RowSet

Irowset
IAccessor
IColumnsInfo
IColumnsRowset*
IRowsetInfo (only required if DBTYPE_HCHAPTER is supported)

Row

IRow*

Error

IerrorInfo
IErrorRecords
ISQLErrorInfo*

??? C.連接SQL Server7.0或更高版本

??????? 使用SQL Server.NET Data Provider連接SQL Server7.0或更高版本是最好的方式,在于它建立與SQL Server的直接連接而中間不需要任何的技術層銜接。如下圖一展示了各種訪問SQL Server7.0或更高版本的技術比較:

圖一(連接訪問SQL Server7.0或更高版本的各種技術比較)

??????? 以下例子演示怎樣創建和打開一個到SQL Server7.0或更高版本數據庫的連接:

‘Visual?Basic

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _?????????????????????????????????????????????????? "Initial Catalog=northwind")

nwindConn.Open()

‘C#

SqlConnection nwindConn = new SqlConnection("Data Source=localhost; Integrated Security=SSPI;" +

"Initial Catalog=northwind");

nwindConn.Open();

??? D.連接ODBC數據源

??????? ODBC.NET Data Provider,使用System.Data.Odbc命名空間,擁有為SQL Server和OLE DB的.NET Data Porvider一樣的結構,使用ODBC前綴(比如OdbcConnetion)和標準的ODBC連接字符。下面例子演示怎樣創建和打開一個到ODBC數據源的連接:

‘Visual?Basic

Dim nwindConn As OdbcConnection = New OdbcConnection("Driver={SQL Server};Server=localhost;" & _???????????????????????????????????????????????????? "Trusted_Connection=yes;Database=northwind")

nwindConn.Open()

‘C#

OdbcConnection nwindConn = new OdbcConnection("Driver={SQL Server};Server=localhost;" +

"Trusted_Connection=yes;Database=northwind");

nwindConn.Open();

??? E.使用DataReaders、DataSets、DataAdapters和DataViews

??????? ADO.NET使用DataSet和DataReader對象讀取數據并存儲。DataSet就好比是數據庫的直系親屬,擁有數據庫的所有表、順序和數據庫的約束(比如表間關系)。DataReader則從數據庫讀取快速的、只進的的和只讀的數據流。使用DataSet,你將會經常使用DataAdapter(或者CommandBuilder)與你的數據庫打交道,同時,你也許會使用DataView去排序和過濾數據,DataSet還允許你可以創建一個繼承于DataSet的子對象來表現數據中的表、行和列。下面圖二顯示DataSet對象模型:

圖二(DataSet對象模型)

下面將要介紹在什么時候使用DataSet或DataReader最恰當,同時也將說明如何使用DataAdapter(包括CommandBuilder)和DataView最優化對數據的訪問。

??? F.DataSet和DataReader的比較

??????? 在設計你的應用程序時決定究竟使用DataSet還是使用DataReader,主要看在你的應用程序中要實現的功能性級別。

??????? 使用DataSet可以在你的應用程序中做以下事情:

??????? I.在多個離散的結果表之間導航;

??????????? 一個DataSet可以包含多個結果表,這些結果表是不連續的。你可以分開處理這些表,也可以把這些表當作父子關系進行處理。

??????? II.操作多個數據源(比如從XML文件和電子數據表等不只一個數據庫得到的混合數據);

??????? 下面的例子演示從SQL Server2000的Northwind數據庫讀取一個customers表的清單和從Access2000的Northwind數據庫讀取一個orders表的清單,然后使用DataRelation在兩個表之間建立一個對應關系:

‘Visual?Basic

Dim custConn As SqlConnection= New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _

"Initial Catalog=northwind;")

Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", custConn)

Dim orderConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _?????????????????????????????????????????????????????? "Data Source=c:"Program Files"Microsoft Office"" & _?????????????????????????????????????????????????????? "Office"Samples"northwind.mdb;")

Dim orderDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Orders", orderConn)

custConn.Open()

orderConn.Open()

Dim custDS As DataSet = New DataSet()

custDA.Fill(custDS, "Customers")

orderDA.Fill(custDS, "Orders")

custConn.Close()

orderConn.Close()

Dim custOrderRel As DataRelation = custDS.Relations.Add("CustOrders", _???????????????????????????????????? custDS.Tables("Customers").Columns("CustomerID"), _????????????????????????????????????custDS.Tables("Orders").Columns("CustomerID"))

Dim pRow, cRow As DataRow

For Each pRow In custDS.Tables("Customers").Rows

?Console.WriteLine(pRow("CustomerID").ToString())

?For Each cRow In pRow.GetChildRows(custOrderRel)

??? Console.WriteLine(vbTab & cRow("OrderID").ToString())

?Next

Next

‘C#

SqlConnection custConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);

OleDbConnection orderConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +??????????????????????????????????????????????? "Data Source=c:""Program Files""Microsoft Office""Office""Samples""northwind.mdb;");

OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);

custConn.Open();

orderConn.Open();

DataSet custDS = new DataSet();

custDA.Fill(custDS, "Customers");

orderDA.Fill(custDS, "Orders");

custConn.Close();

orderConn.Close();

DataRelation custOrderRel = custDS.Relations.Add("CustOrders",????????????????????????????? custDS.Tables["Customers"].Columns["CustomerID"],????????????????????????????? custDS.Tables["Orders"].Columns["CustomerID"]);

foreach (DataRow pRow in custDS.Tables["Customers"].Rows)

{

?Console.WriteLine(pRow["CustomerID"]);

?? foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))

??? Console.WriteLine(""t" + cRow["OrderID"]);

}

??????? III.層中交換數據或者使用一個XML WEB服務,與DataReader不一樣的是DataSet可以被傳遞給一個遠程的客戶端;

??????????? 下面的例子演示如何創建一個XML WEB服務,其中使用GetCustomers取數據庫中customers表數據,使用UpdateCustomers更新數據庫中數據:

1.???? ‘Visual?Basic

2.???? <% @ WebService Language = "VB" Class = "Sample" %>

3.???? Imports System

4.???? Imports System.Data

5.???? Imports System.Data.SqlClient

6.???? Imports System.Web.Services

7.???? <WebService(Namespace:="http://microsoft.com/webservices/")> _

8.???? Public Class Sample

9.???? ??Public nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

10.???<WebMethod( Description := "Returns Northwind Customers", EnableSession := False )> _

11.???Public Function GetCustomers() As DataSet

12.?????Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn)

13.?????Dim custDS As DataSet = New DataSet()

14.?????custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

15.?????custDA.Fill(custDS, "Customers")

16.?????GetCustomers = custDS

17.???End Function

18.???<WebMethod( Description := "Updates Northwind Customers", EnableSession := False )> _

19.???Public Function UpdateCustomers(custDS As DataSet) As DataSet

20.?????Dim custDA As SqlDataAdapter = New SqlDataAdapter()

21.?????custDA.InsertCommand = New SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " & _????????????????????????????????????????? "Values(@CustomerID, @CompanyName)", nwindConn)

22.?????custDA.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

23.?????custDA.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName")

24.?????custDA.UpdateCommand = New SqlCommand("UPDATE Customers Set CustomerID = @CustomerID, " & _

25.?"CompanyName = @CompanyName WHERE CustomerID = @OldCustomerID", nwindConn)

26.?????custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

27.?????custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName")

28.?????Dim myParm As SqlParameter = custDA.UpdateCommand.Parameters.Add("@OldCustomerID", SqlDbType.NChar, 5, "CustomerID")

29.?????myParm.SourceVersion = DataRowVersion.Original

30.?????custDA.DeleteCommand = New SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", nwindConn)

31.?????myParm = custDA.DeleteCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

32.?????myParm.SourceVersion = DataRowVersion.Original

33.?????custDA.Update(custDS, "Customers")

34.?????UpdateCustomers = custDS

35.???End Function

36.?End Class

37.??

38.?‘C#

39.?<% @ WebService Language = "C#" Class = "Sample" %>

40.?using System;

41.?using System.Data;

42.?using System.Data.SqlClient;

43.?using System.Web.Services;

44.?[WebService(Namespace="http://microsoft.com/webservices/")]

45.?public class Sample

46.?{

47.???public SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

48.???[WebMethod( Description = "Returns Northwind Customers", EnableSession = false )]

49.???public DataSet GetCustomers()

50.???{

51.?????SqlDataAdapter custDA = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn);

52.?????DataSet custDS = new DataSet();

53.?????custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;

54.?????custDA.Fill(custDS, "Customers");

55.?????return custDS;

56.???}

57.???[WebMethod( Description = "Updates Northwind Customers", EnableSession = false )]

58.???public DataSet UpdateCustomers(DataSet custDS)

59.???{

60.?????SqlDataAdapter custDA = new SqlDataAdapter();

61.?????custDA.InsertCommand = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " +????????????????????????????????????????? "Values(@CustomerID, @CompanyName)", nwindConn);

62.?????custDA.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

63.?????custDA.InsertCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName");

64.?????custDA.UpdateCommand = new SqlCommand("UPDATE Customers Set CustomerID = @CustomerID, " + "CompanyName = @CompanyName WHERE CustomerID = @OldCustomerID", nwindConn);

65.?????custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

66.?????custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName");

67.?????SqlParameter myParm = custDA.UpdateCommand.Parameters.Add("@OldCustomerID", SqlDbType.NChar, 5, "CustomerID");

68.?????myParm.SourceVersion = DataRowVersion.Original;

69.?????custDA.DeleteCommand = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", nwindConn);

70.?????myParm = custDA.DeleteCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

71.?????myParm.SourceVersion = DataRowVersion.Original;

72.?????custDA.Update(custDS, "Customers");

73.?????return custDS;

74.???}

}

??????? IV.數據的再使用(比如排序、搜索或過濾數據);

??????? V.執行每行的大容量數據處理,處理DataReader掛起的連接服務已不再需要、影響性能的每一行;

??????? VI.使用諸如XSLT轉換或者XPath查詢等XML操作的多重數據。

??????????? 下面的例子介紹如何使用XmlDataDocument同步DataSet數據和如何使用XSLT樣式文件在HTML文件中包含DataSet數據,首先是XSLT樣式文件:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="CustomerOrders">

?<HTML>

?<STYLE>

?BODY {font-family:verdana;font-size:9pt}

?TD?? {font-size:8pt}

?</STYLE>

??? <BODY>

??? <TABLE BORDER="1">

????? <xsl:apply-templates select="Customers"/>

??? </TABLE>

??? </BODY>

?</HTML>

</xsl:template>

<xsl:template match="Customers">

??? <TR><TD>

????? <xsl:value-of select="ContactName"/>, <xsl:value-of select="Phone"/><BR/>

??? </TD></TR>

????? <xsl:apply-templates select="Orders"/>

</xsl:template>

<xsl:template match="Orders">

?<TABLE BORDER="1">

??? <TR><TD valign="top"><B>Order:</B></TD><TD valign="top"><xsl:value-of select="OrderID"/></TD></TR>

??? <TR><TD valign="top"><B>Date:</B></TD><TD valign="top"><xsl:value-of select="OrderDate"/></TD></TR>

??? <TR><TD valign="top"><B>Ship To:</B></TD>

??????? <TD valign="top"><xsl:value-of select="ShipName"/><BR/>

??????? <xsl:value-of select="ShipAddress"/><BR/>

??????? <xsl:value-of select="ShipCity"/>, <xsl:value-of select="ShipRegion"/>?<xsl:value-of select="ShipPostalCode"/><BR/>

??????? <xsl:value-of select="ShipCountry"/></TD></TR>

?</TABLE>

</xsl:template>

</xsl:stylesheet>

??????????? 接著下面的代碼演示如何填充DataSet的數據和運用XSLT樣式:

‘Visual?Basic

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports System.Xml

Imports System.Xml.Xsl

Public Class Sample

?Public Shared Sub Main()

??? Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=northwind;Integrated Security=SSPI")

??? nwindConn.Open()

??? Dim myDataSet As DataSet = New DataSet("CustomerOrders")

??? Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", nwindConn)

??? custDA.Fill(myDataSet, "Customers")

??? Dim ordersDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Orders", nwindConn)

??? ordersDA.Fill(myDataSet, "Orders")

??? nwindConn.Close()

??? myDataSet.Relations.Add("CustOrders",_??????????????????????????? myDataSet.Tables("Customers").Columns("CustomerID"),_??????????????????????????? myDataSet.Tables("Orders").Columns("CustomerID")).Nested = true

??? Dim xmlDoc As XmlDataDocument = New XmlDataDocument(myDataSet)

??? Dim xslTran As XslTransform = New XslTransform

??? xslTran.Load("transform.xsl")

??? Dim writer As XmlTextWriter = New XmlTextWriter("xslt_output.html", System.Text.Encoding.UTF8)

??? xslTran.Transform(xmlDoc, Nothing, writer)

??? writer.Close()

?End Sub

End Class

‘C#

using System;

using System.Data;

using System.Data.SqlClient;

using System.Xml;

using System.Xml.Xsl;

public class Sample

{

?public static void Main()

?{

??? SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Initial Catalog=northwind;Integrated Security=SSPI;");

??? nwindConn.Open();

??? DataSet custDS = new DataSet("CustomerDataSet");

??? SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", nwindConn);

??? custDA.Fill(custDS, "Customers");

??? SqlDataAdapter ordersDA = new SqlDataAdapter("SELECT * FROM Orders", nwindConn);

??? ordersDA.Fill(custDS, "Orders");

??? nwindConn.Close();

??? custDS.Relations.Add("CustOrders",

???????????????????????? custDS.Tables["Customers"].Columns["CustomerID"],

??????????????? ?????????custDS.Tables["Orders"].Columns["CustomerID"]).Nested = true;

??? XmlDataDocument xmlDoc = new XmlDataDocument(custDS);

??? XslTransform xslTran = new XslTransform();

??? xslTran.Load("transform.xsl");

??? XmlTextWriter writer = new XmlTextWriter("xslt_output.html", System.Text.Encoding.UTF8);

??? xslTran.Transform(xmlDoc, null, writer);

??? writer.Close();

?}

}

??????? 使用DataReader可以在你的應用程序中做以下事情:

??????? I.不需要緩存數據;

??????? II.處理太大而不能存儲的數據;

??????? III.需要以只進、只讀和快速方式一次性訪問數據的。

??? G.使用一個自定義的強有力的DataSet類型的好處

??????? 通過創建一個繼承于DataSet的子對象,你可以在運行期間執行類型檢查和聲明。當你有了一個確定的計劃或者為你的DataSet有相關的結構,你就可以創建一個用行和列表述一個對象的DataSet。比如,你表露一個消費者對象的名字屬性來取代表露消費者表的一行中的名字列。有關此節詳細信息,請參考微軟站點上的文章:Working with a Typed DataSet

??? H.在自定義的DataSet中處理無效數據

??????? 通過XSD語言檢查你的DataSet確保你的DataSet適當地處理無效引用。nullValue注釋使你把BBNull替換成別的字符,String.Empty;或者保留無效引用,拋出錯誤提示,提示將取決于你應用程序的上下文,默認情況是引用了無效字符。

??? I.在DataSet中刷新數據

??????? 如果你要從數據庫刷新你的DataSet,使用DataAdapter.Fill,如果你的DataTable擁有主鍵,DataAdapter.Fill將根據主鍵匹配新的行,同時從數據庫取值運用到已存在的行。除非已刷新行在再次刷新前被修改,否者它的RowState將會被設置為UnChanged。注意的是如果DataTable沒有設置主鍵,你的DataSet有可能出現重復的值。如果你想從數據庫刷新一個表并保留任何表中行的更改,那么你就要首先填充一個新表,然后利用preserveChanges等于true來合并那個DataTable到你的DataSet中去。

??? J.在DataSet中搜索數據

??????? 當你在一個DataSet中查詢特殊標準的行時,利用索引查詢將會增加你的查詢性能。當你給一個DataTable設計主鍵時,索引同時也創建了。當你為一個DataTable創建DataView時,索引也同時創建了。以下是使用索引查詢的一些情況:

??? ??? I.如果查詢與DataTable中標識主鍵的列順序相反,使用DataTable.Rows.Find代替DataTable.Select;

??????? II.如果查詢包括無主鍵的列,你可以使用DataView為數據的多重查詢改善性能。當你在DataView中使用排序時,查詢的同時就會創建一個索引。DataView使用Find和FindRows方法查詢DataTable中的數據;

??????? IV.假如你不需要表的排序視圖,你也可以利用DataView為DataTable創建一個索引查詢。注意的是這僅僅在你執行多重查詢時才有優勢,如果你只是執行一個簡單查詢,使用此方法將會降低你的查詢效率。

??? K.DataView的結構

??????? 前面也講過,在給DataTable創建DataView和Sort、RowFilter或者RowStateFilter屬性發生更改的同時潛在的也給DataTable創建了索引。創建DataView對象時,如果Sort、RowFilter和RowStateFilter屬性也同時指定,那么索引將只創建一次;如果創建一個空的DataView,那么索引至少被創建兩次。

??? L.頁面調度

??????? ADO.NET使你可以很清楚地控制從你的數據庫返回什么樣的數據和有多少數據存儲到一個DataSet。以下沒有單一的介紹調度一個查詢結果,但是當你設計你的應用程序時應該考慮到以下情況:

??????? I.避免在使用DataAdapter.Fill時,在startRecord和maxRecords值上溢出。

??????? II.解決這類問題的辦法是使用WHERE語句、ORDER BY語句和TOP斷言。

??????? III.還有一種解決辦法是使用TOP斷言和嵌套的SELECT聲明。比如如下代碼:

???? SELECT TOP 10 * FROM

(SELECT TOP 30 * FROM Customers ORDER BY Id ASC) AS Table1 ORDER BY Id DESC

IV.如果你的日期不是經常改變,你可以使用DataSet的存儲功能改善執行性能,比如你可以存儲相當10頁的數據到你的DataSet,然后當用戶訪問超過在存儲區的FirstPage和LastPage時才查詢數據庫以獲得新的數據。

??? M.有計劃地填充DataSet

??????? 當使用數據填充DataSet時,DataAdapter.Fill方法使用DataSet已有的計劃和SelectCommand返回的數據對DataSet進行填充。如果DataSet中沒有與之對應的表將會失敗,Fill創建一個表,默認情況下,Fill僅僅定義列和列的類型。你可以通過設置DataAdapter的MissingSchemaAction屬性重載默認的Fill方法。舉例,要使Fill方法創建表時總是包含主鍵信息、唯一約束、列屬性、是否允許空值、列的最大長度、只讀列和自動增量列,指定DataAdapter.MissingSchemaAction為MissingSchemaAction.AddWithKey。作為選擇,你也可以在調用DataAdapter.Fill之前調用DataAdpater.FillSchema來保證填充DataSet時計劃到位。調用FillSchema會給數據庫增加額外的負擔來輸出Schema信息,所以最好的建議是指定DataSet的計劃,或者在調用Fill之前設置DataAdapter的MissingSchemaAction。

??? N.使用CommandBuilder

??????? CommandBuilder自動地生成基于DataAdapter的SelectCommand的DataAdapter的InsertCommand、UpdateCommand和DeleteCommand屬性。提供SelectCommand執行一個簡單的SELECT,以下信息介紹使用CommandBuilder的最佳處理。

??????? I.在設計階段不要使用CommandBuilder,否者產生DataAdapter Command屬性的進程將會受到干擾。如果你預先知道你的UPDATE、INSERT和DELETE聲明的內容,你應該清楚地指定。一個最好的設計方案是為你的UPDATE、INSERT和DELETE創建存儲過程,并在DataAdapter的Command屬性中設置和使用它們。

??????? II.CommandBuilder使用SelectCommand決定其他Command屬性的值。如果DataAdapter的SelectCommand本身發生變化,應該使用RefreshSchema去刷新Command的屬性。

??????? III.只要DataAdapter的Command屬性為空,CommandBuilder就僅僅創建一個Command,即使你明確地指定Command的屬性值,CommandBuilder也不會重寫,所以如果你想創建一個Command并保留以前的屬性設置,那么就把Command的屬性設置為null。

??? O.SQL的批聲明和處理

??????? 很多的數據庫都支持在一條命令中使用綜合查詢或批處理或多條子命令。比如SQL Server中使用“;”。在一條命令中使用綜合的多重命令可以有效地減少與數據庫之間交互的次數并在你的應用程序中提高效率。比如在你的應用程序中使用批處理完成所有的刪除(delete)任務等等。

??????? 使用批處理確實提高了效率,但同時也在你的應用程序中管理更新DataSet數據時增加了復雜性。要使得復雜性變簡單化,你就要在你的DataSet中為每個DataTable創建一個DataAdapter。

??? P.使用多個表填充一個DataSet

??????? 如果你是用批處理從多個表返回數據并把這些數據填充到一個DataSet,fill方法將會使用第一個表的表名命名第一個表,以后的表命名將會采用在第一個表的表名基礎上加上一個遞增的數字。舉例,下面的代碼將逐步說明fill方法的工作原理:

??????? ‘Visual Basic

??????? Dim da As SqlDataAdapter = New SqlDataAdapter(“select * from customers;select * from orders;”,myConnection)

??????? Dim ds As DataSet = New DataSet()

??????? da.fill(ds,”customers”)

??????? ‘C#

??????? SqlDataAdapter da = new SqlDataAdapter(“select * from customers;select * from orders;”,myConnection);

??????? DataSet ds = new DataSet();

??????? da.fill(ds,”customers”);

??????? 如上面代碼所示,customers表數據將會存放在一個命名為customers的DataTable中,而orders表數據將會放在一個命名為customers1的DataTable中。當然你也可以在數據填充結束后很容易地修改customers1表屬性(TableName)為orders。然而,在以后的數據填充時,只會影響customers表中數據,而orders表將會忽略并同時創建一個新的命名為customers1的表。要解決這個問題,你就要在customers1和orders之間建立一個DataTableMapping映射。其他表也如此。舉例說明:

??????? ‘Visual Basic

Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection)

da.TableMappings.Add("Customers1", "Orders")

Dim ds As DataSet = New DataSet()

da.Fill(ds, "Customers")

‘C#

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection);

da.TableMappings.Add("Customers1", "Orders");

DataSet ds = new DataSet();

da.Fill(ds, "Customers");

??? Q.使用DataReader

??????? 下面是使用DataReader的一些技巧和一些問題的回答:

??????? I.在使用相關Command訪問任何輸出參數之前必須關閉DataReader;

??????? II.在讀取數據結束后應當關閉DataReader。如果你的Connection僅僅是用來返回DataReader,那么在關閉DataReader之后你也應該立即關閉它。另外一個關閉Connection的方法是傳遞CommandBehavior.CloseConnection給ExecuteReader方法。此方法在你從一個方法中返回DataReader并且對這個DataReader沒有關閉控制權或者關聯的連接時使用時非常有用的。

??????? III.DataReader是為已連接的數據存取設計;

??????? IV.使用GetString、GetInt32等返回特殊數據類型數據;

??????? V.一個連接只允許使用一個DataReader。在ADO中,如果你只創建一個連接并使用兩個recordsets,一個只讀游標和一個只進游標,但實際上,ADO已經為你創建了一個隱式的連接,并在不用的時候隱式地關閉它。ADO.NET中是不行的,你必須為每個DataReader創建一個Connection,這也是為了讓你在使用Connection時給予更多的控制信息。

??????? VI.默認下,DataReader每次讀取時把行中所有的數據裝載到內存中。并允許你隨機存取當前行中數據。如果隨即存取沒有必要(沒有必要把所有數據都裝載到內存),并想提高執行效率,給ExecuteReader方法傳遞CommandBehavior.SequentialAccess,這樣就會改變DataReader的默認動作為僅僅裝載請求的數據到內存。注意的是這種方法要求你順序地存取行中列數據,一旦你略過某一列,以后你將再不會讀取到該列的數據。

??????? VII.如果當你在完成從一個DataReader讀取數據后,仍然還有大量未讀不需要的數據,這就要在調用DataReader的Close命令之前調用Cancel命令。調用DataReader的Close命令會導致把不需要的數據裝載進來并在關閉游標之前清空數據。而調用Cancel命令就會丟棄這部分數據,從而DataReader在關閉之前就不會讀取它們。如果你正在從你的命令返回輸出參數,調用Cancel命令同樣會丟棄它們。如果你需要讀取任何輸出參數,你就不要使用Cancel,而直接使用Close。

??? R.BLOBs對象

??????? 當你使用DataReader讀取二進制數據時,你應該傳遞CommandBehavior.SequentialAccess給ExecuteReader方法調用。因為DataReader的默認情況是每次讀取數據時把每行中所有的數據都存儲到內存,而二進制數據又非常的大,結果就會使大量的內存空間被一個單一的BLOB占用。SequentialAccess使得你的DataReader默認行為為僅讀取需要的數據。然后你就可以使用GetBytes或者GetChars決定一次讀取多少數據。

??????? 記住的是使用SequentialAccess后,你不能次序顛倒地訪問DataReader中不同的字段。就是說,如果你的查詢返回三列,其中第三列是BLOB數據類型,如果你想訪問第三列數據,那么你就必須先訪問第一列,然后是第二列,再然后才是第三列的BLOB數據。這是因為此時返回的數據是有序的,而且一旦你跳過某一列,再回過頭來讀取這一列是不行的。

??? S.使用命令

??????? ADO.NET提供了執行命令的幾種不同方法,同時也提供了優化執行命令的幾種不同參數。下面將要介紹的是選擇最佳執行命令的技巧和改善一個可執行命令的性能。

??????? I.OleDbCommand最佳實踐

??????? .NET 框架中各種數據提供者之間的執行命令標準幾乎是一樣的。但是也有不同,下面是執行OleDbCommand的一些技巧:

??????? ??? 使用CommandType.Text調用存儲過程,使用CommandType.StoredProcedure生成;

??????????? 確定設置OleDbParameter的類型、大小(如果要求)和精度(如果是數字或者小數),注意的是,如果你不明確設置OleDbParameter,OleDbCommand將會為你的執行命令重新生成OleDbParameter。

??????? II.SqlCommand最佳實踐

??????????? 使用SqlCommand快速執行存儲過程:如果你要調用一個存儲過程,指定SqlCommand的CommandType為存儲過程的CommandType。這樣在執行命令時,就會提交此命令是調用存儲過程,從而達到快速執行。

??????? III.使用已準備的方法

??????????? Command.Prepare方法優化你的參數化執行命令。Prepare結構為多重調用最優化指定命令。要使用Prepare,你首先得理解你的數據庫是怎樣相應Prepare調用。SQL Server 2000中,Command已經被隱式優化和Prepare不是必須的;在SQL Server7.0或其它數據庫中使用Prepare是有效的。

??????? IV.明確地指定計劃和元數據

??????????? ADO.NET中的很多對象都要推斷元數據信息,只要用戶不指定它,舉例如下:

??????????? 如果在DataSet中不存在,DataAdapter.Fill方法就會創建表和列信息;

??????????? CommandBuilder為獨立表的Select命令生成DataAdpater命令參數;

??????????? CommandBuilder.DeriveParameters組裝一個命令對象的參數信息;

??????? 如果什么時候都使用上面講的方法,可能會降低執行性能。推薦在設計階段和廣告段應用程序中使用。可能的情況下,一般都要指定計劃和元數據。這些包括指定DataSet的表和列、指定DataAdapter的Command屬性和指定Command的參數信息。

??????? V.ExecuteScalar和ExecuteNonQuery

??????????? 如果你想只返回一個簡單值,比如Count(*)、Sum(Price)或者Avg(Quantity),你可以使用ExecuteScalar,它幫助你一步到位得到你想要的值,從而避免使用DataReader的兩步計算(ExecuteReader+GetValue);

??????????? 當你不想返回行信息,比如修改數據(INSERT、UPDATE、DELETE)或者僅需要輸出參數或者返回值,使用ExecuteNonQuery,它去掉不必要的處理創建一個空的DataReader。

??????? VI.空值檢查

??????????? 如果在你的表中某列允許空值,你可以使用Where語句進行空值檢查,下面舉例說明:

??????? select * from customers where ((LastName=@LastName) or (LastName IS NULL and @LastName IS NULL))

??????????? 上面語句檢查了列是否為空和參數是否為空。

??????? VII.傳遞null參數值

??????????? 當你在命令中傳遞null參數值給數據庫時,你不能使用null(Nothing在vb中),應該使用DBNull.Value。舉例:

??????? ‘vb

??????? Dim param As SqlParameter = New SqlParameter(“@Name”,SqlDbType.NVarChar,20)

??????? param.Value = DBNull.Value

??????? ‘C#

??????? SqlParameter param = new SqlParameter(“@Name”,SqlDbType.NVarChar,20);

??????? param.Value = DBNull.Value;

??????? VIII.使用事務處理

??????????? ADO.NET中的事務處理模型已經改變,在ADO中,一旦StartTransaction被調用,任何事務下的更新都被認為是事務的一部分。然而,在ADO.NET中,當Connection.BeginTransaction被調用,返回一個命令關聯的事務對象(事務屬性是由命令的事務屬性指定的)。這樣保證讓你在一個Connection中執行多個事務。如果命令的Command.Transaction屬性與開始的事務不一致,命令就不會完成并拋出錯誤。

??? ??? IX.使用Connections

??????????? 高效率的應用程序應該使用最少的時間與數據庫建立連接,比如使用Connection Pooling等。下面將介紹如何使用ADO.NET建立高效率應用的一些數據庫方面的技巧。

??????? Connection Pooling

??????????? 在SQL Server、OLE DB和.NET框架結構中的Data Provider中,都提供了隱式的連接池連接支持。你可以在ConnectionString中指定不同的參數值控制連接池的行為。比如下面的例子使OLE DB的連接池無效并自動地進行事務處理:

??????? Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

??????????? 在SQL Server.NET Data Provider中提供了以下參數設置控制連接池的行為:Connection Lifttime、Connection Reset、Enlist、Max Pool Size、Min Pool Size和Pooling。

??????? 使用DataAdapter最優化連接

??????????? 使用DataAdpater的Fill和Update方法時會自動地打開相應的連接。如果Fill或者Update打開一個連接,在它操作完成后它會關閉此連接。最好的執行方式是在你需要的時候才建立連接。同時減少多個操作時打開和關閉連接的次數。

??????????? 推薦你在僅僅執行一個Fill或者Update時,允許Fill或者Update方法隱式地打開和關閉連接;如果你要執行多個Fill或者Update,建議你顯式地建立連接、執行Fill或者Update操作然后顯式地關閉連接。

??????????? 額外地,在我們執行事務處理時,在開始事務之前應該顯式地建立連接,并在事務結束后顯式地關閉連接。舉例:

‘Visual Basic

Public Sub RunSqlTransaction(da As SqlDataAdapter, myConnection As SqlConnection, ds As DataSet)

?myConnection.Open()

?Dim myTrans As SqlTransaction = myConnection.BeginTransaction()

?myCommand.Transaction = myTrans

?Try

??? da.Update(ds)

??? myTrans.Commit()

??? Console.WriteLine("Update successful.")

?Catch e As Exception

??? Try

????? myTrans.Rollback()

??? Catch ex As SqlException

????? If Not myTrans.Connection Is Nothing Then

??????? Console.WriteLine("An exception of type " & ex.GetType().ToString() & _

????????????????????????? " was encountered while attempting to roll back the transaction.")

????? End If

??? End Try

??? Console.WriteLine("An exception of type " & e.GetType().ToString() & " was encountered.")

??? Console.WriteLine("Update failed.")

?End Try

?myConnection.Close()

End Sub

‘C#

public void RunSqlTransaction(SqlDataAdapter da, SqlConnection myConnection, DataSet ds)

{

?myConnection.Open();

?SqlTransaction myTrans = myConnection.BeginTransaction();

?myCommand.Transaction = myTrans;

?try

?{

??? da.Update(ds);

??? myCommand.Transaction.Commit();

??? Console.WriteLine("Update successful.");

?}

?catch(Exception e)

?{

??? try

??? {

????? myTrans.Rollback();

??? }

??? catch (SqlException ex)

??? {

????? if (myTrans.Connection != null)

????? {

??????? Console.WriteLine("An exception of type " + ex.GetType() +

????????????????????????? " was encountered while attempting to roll back the transaction.");

????? }

??? }

??? Console.WriteLine(e.ToString());

??? Console.WriteLine("Update failed.");

?}

?myConnection.Close();

}

??????? X.總是關閉Connections和DataReaders

??????????? 在你使用完Connection或者DataReader對象后,你應該明確地關閉它們。系統中的碎片整理程序只是在最后需要的時候才進行整理,而一些很耗資源的連接還得由你自己來釋放。同時如果你不明確地關閉連接,此連接就有可能不返回連接池,除非連接池的Max Pool Size已經達到并且此連接還仍然有效。

??????????? 注意:在你的類的Finalize方法中不要使用Close或者Dispose運用到一個Connection或者一個DataReader或者任何被管理對象上。在一個Finalizer中,僅僅釋放你的類直接擁有的無法管理的資源。如果你的類不擁有任何無法管理的資源,就不要在你的類使用Finalize方法。

??????? XI.在C#中使用Using聲明

??????????? 在C#中,一個非常便利的保證關閉你使用過的Connection和DataReader對象的方法是使用Using聲明。當對象超出了它的使用范圍,Using聲明就會自動地釋放該對象。舉例:

‘C#

string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";

using (SqlConnection conn = new SqlConnection(connString))

{

?SqlCommand cmd = conn.CreateCommand();

?cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";

?

?conn.Open();

?using (SqlDataReader dr = cmd.ExecuteReader())

?{

??? while (dr.Read())

????? Console.WriteLine("{0}"t{1}", dr.GetString(0), dr.GetString(1));

?}

}

??????????? Using聲明在Visual Basic.Net中不可用。

??????? XII.避免訪問OleDbConnection.State屬性

??????????? 如果你需要經常檢查State屬性,最好在OleDbConnection上監聽StateChange事件。下面的代碼演示當OleDbConnection.State發生變化時使用StateChange向控制臺發送一條消息:

‘Visual?Basic

AddHandler nwindConn.StateChange, New StateChangeEventHandler(AddressOf OnStateChange)

Protected Shared Sub OnStateChange(sender As Object, args As StateChangeEventArgs)

?Console.WriteLine("The current Connection state has changed from {0} to {1}.", _

??????????????????? args.OriginalState, args.CurrentState)

End Sub

‘C#

nwindConn.StateChange?+= new StateChangeEventHandler(OnStateChange);

protected static void OnStateChange(object sender, StateChangeEventArgs args)

{

?Console.WriteLine("The current Connection state has changed from {0} to {1}.",

??????????????????? args.OriginalState, args.CurrentState);

}

??? T.與XML結合

??????? ADO.NET在DataSet中提供對XML的廣泛支持,同時在SQL Server2000或以后版本中的XML功能性擴展也能在ADO.NET中得到充分運用。你可以使用SQLXML訪問在SQL Server2000和以后版本中提供的XML功能性擴展。下面是使用XML和ADO.NET的一些技巧信息。

??? ??? I.DataSet和XML

??????? DataSet和XML的完美整合,可以使你完成以下事情:

??????????? 從XSD計劃中載入一個DataSet的計劃或相關結構;

??????????? 下面的例子說明一個XSD文件的結構,其中MyDataSet就是我們的DataSet元素,它下面包含一個customers復合類型元素,有了它我們就可以映射創建一個這樣的表:Customers (CustomerID,CompanyName,Phone),同時也定義我們的DataSet的計劃或者結構:

<xs:schema id="SomeID"

???????????? xmlns=""

???????????? xmlns:xs="http://www.w3.org/2001/XMLSchema"

???????????? xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

??? <xs:element name="MyDataSet" msdata:IsDataSet="true">

????? <xs:complexType>

???? ???<xs:choice maxOccurs="unbounded">

????????? <xs:element name="customers" >

??????????? <xs:complexType >

????????????? <xs:sequence>

??????????????? <xs:element name="CustomerID" type="xs:integer"

???????????????????????????? minOccurs="0" />

??????? ????????<xs:element name="CompanyName" type="xs:string"

???????????????????????????? minOccurs="0" />

??????????????? <xs:element name="Phone" type="xs:string" />

????????????? </xs:sequence>

??????????? </xs:complexType>

?????????? </xs:element>

??????? </xs:choice>

????? </xs:complexType>

??? </xs:element>

?</xs:schema>

??????????? 從XML文件中載入一個DataSet的內容;

??????????? 要從XML文件填充DataSet的內容,請使用DataSet對象的ReadXml方法。下面的例子說明如何從一個XML文件讀取數據到一個DataSet:

‘Visual?Basic

Dim myDS As DataSet = New DataSet

myDS.ReadXml("input.xml", XmlReadMode.ReadSchema)

‘C#

DataSet myDS = new DataSet();

myDS.ReadXml("input.xml", XmlReadMode.ReadSchema);

??????????? 當沒有提供計劃時從一個XML文件的內容中推斷一個DataSet的計劃;

??????????? 要從一個XML文件載入DataSet的計劃信息,你可以使用DataSet對象的ReadXmlSchema方法。如果沒有提供計劃,你還可以使用InferXmlSchema從XML文件推斷DataSet的計劃,下面的例子介紹如何通過InferXmlSchema從一個XML文件推斷出DataSet的計劃:

‘Visual?Basic

Dim myDS As DataSet = New DataSet

myDS.InferXmlSchema("input_od.xml", New String[] {"urn:schemas-microsoft-com:officedata"})

‘C#

DataSet myDS = new DataSet();

myDS.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");

??????????? 象XSD格式計劃一樣寫一個DataSet的計劃;

??????????? 下面的例子展示如何通過ReadXmlSchema從一個XSD文件載入DataSet的計劃:

‘Visual?Basic

Dim myDS As DataSet = New DataSet

myDS.ReadXmlSchema("schema.xsd")

‘C#

DataSet myDS = new DataSet();

myDS.ReadXmlSchema("schema.xsd");

??????????? 象XML格式文件一樣讀寫一個DataSet的內容。

??????????? 利用DiffGrams從DataSet中讀寫內容,下面的例子顯示在提交更改之前更新表中一行數據的結果,其中CustomerID為ALFKI的那一行數據被修改但是還沒有更新:

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

?<CustomerDataSet>

??? <Customers diffgr:id="Customers1" msdata:rowOrder="0" diffgr:hasChanges="modified">

????? <CustomerID>ALFKI</CustomerID>

????? <CompanyName>New Company</CompanyName>

??? </Customers>

??? <Customers diffgr:id="Customers2" msdata:rowOrder="1" diffgram:hasErrors="true">

????? <CustomerID>ANATR</CustomerID>

????? <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>

??? </Customers>

??? <Customers diffgr:id="Customers3" msdata:rowOrder="2">

????? <CustomerID>ANTON</CustomerID>

????? <CompanyName>Antonio Moreno Taquerí-a</CompanyName>

??? </Customers>

??? <Customers diffgr:id="Customers4" msdata:rowOrder="3">

????? <CustomerID>AROUT</CustomerID>

????? <CompanyName>Around the Horn</CompanyName>

??? </Customers>

?</CustomerDataSet>

?<diffgr:before>

??? <Customers diffgr:id="Customers1" msdata:rowOrder="0">

????? <CustomerID>ALFKI</CustomerID>

????? <CompanyName>Alfreds Futterkiste</CompanyName>

??? </Customers>

?</diffgr:before>

?<diffgr:errors>

??? <Customers diffgr:id="Customers2" diffgr:Error="An optimistic concurrency violation has occurred for this row."/>

?</diffgr:errors>

</diffgr:diffgram>

??????? 注意:你可以在你的DataSet中使用XPath查詢和XSLT轉換來同步運用XML的功能性,或者提供一個相關的視圖,或者創建一個XML文檔數據的一個副本。

??? ??? II.計劃接口

??????????? 當你從一個XML文件載入一個DataSet時,你可以從XSD計劃載入DataSet的計劃,或者你可以在載入數據之前預先確定表和列。如果這里沒有XSD計劃或者你又不知道那個表和列是XML文件內容確定的,那么你可以使用基于XML文檔結構推斷計劃。

??????????? 計劃接口是一個很有用的移植工具,但是它應該限制在設計階段的應用程序中,僅僅因為以下幾點:

??????????? 推斷計劃將會提出額外的處理從而影響應用程序性能的提高;

??????????? 所有的列將會是一個數據類型:string;

??????????? 推斷過程具有不確定性。那就是說,它是基于XML文件的,而不是基于有意的計劃。

??????? III.SQL SERVER 的FOR XML查詢

??????????? 如果你想返回如SQL SERVER的FOR XML查詢結果,你可以用SQL Server.NET Data Provider直接使用SqlCommand.ExecuteXmlReader方法創建一個XmlReader。

??????? IV.SQLXML管理類

??????????? 在.NET框架中SQLXML管理類使用Microsoft.Data.SqlXml命名空間。它使得你可以執行Xpath查詢和XML模板文件,如同運用XSLT轉換數據一樣。最新版本是SQLXML3.0。

??? U.更多有用技巧

??????? I.避免自動增量值沖突

??????????? 像大多數數據庫一樣,DataSet讓你在增加新的數據時標識為自動增量的列自動填充增量值。使用自動增量時,應當避免本地DataSet的增量值與數據庫的增量值相沖突。要避免這種情況,推薦在數據庫和DataSet同時使用自動增量時,在你的DataSet中創建AutoIncrementStep為-1和AutoIncrementSeed為0的自動增量列,同時保證你的數據庫中的列從1開始正方向遞增。這樣就保證一個負方向的增量不會與一個正方向的增量相沖突。另外一種方法是使用Guid代替自動增量。在DataSet中產生的Guid永遠不會與數據庫中產生的Guid一樣。如果你的自動增量列只是簡單地用作唯一值,并且不表示任何含義,建議你使用Guids代替自動增量。它們是唯一的并避免使用自動增量產生的額外工作。

??????? II.處理樂觀并發錯誤

??????????? 因為DataSet與數據庫是分離的,所以你應該在你的應用程序中避免當多個客戶更新數據庫數據時發生沖突。這里有幾種處理樂觀并發錯誤的解決方案。一是在你的表中增加一個時間戳列。二是校驗一行中所有列的數據是否與你在SQL聲明中使用Where子句找到的數據靜態匹配。下面的例子說明如何使用where條件處理樂觀并發錯誤:

‘Visual?Basic

?Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

?Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers ORDER BY CustomerID", nwindConn)

?' The Update command checks for optimistic concurrency violations in the WHERE clause.

?custDA.UpdateCommand = New SqlCommand("UPDATE Customers (CustomerID, CompanyName) VALUES(@CustomerID, @CompanyName) " & _

??????????????????????????????????????? "WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName", nwindConn)

?custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")

?custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 30, "CompanyName")

?' Pass the original values to the WHERE clause parameters.

?Dim myParm As SqlParameter

?myParm = custDA.UpdateCommand.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID")

?myParm.SourceVersion = DataRowVersion.Original

?myParm = custDA.UpdateCommand.Parameters.Add("@oldCompanyName", SqlDbType.NVarChar, 30, "CompanyName")

?myParm.SourceVersion = DataRowVersion.Original

?' Add the RowUpdated event handler.

?AddHandler custDA.RowUpdated, New SqlRowUpdatedEventHandler(AddressOf OnRowUpdated)

?Dim custDS As DataSet = New DataSet()

?custDA.Fill(custDS, "Customers")

?' Modify the DataSet contents.

?custDA.Update(custDS, "Customers")

?Dim myRow As DataRow

?For Each myRow In custDS.Tables("Customers").Rows

??? If myRow.HasErrors Then Console.WriteLine(myRow(0) & vbCrLf & myRow.RowError)

?Next

Private Shared Sub OnRowUpdated(sender As object, args As SqlRowUpdatedEventArgs)

?If args.RecordsAffected = 0

??? args.Row.RowError = "Optimistic Concurrency Violation Encountered"

??? args.Status = UpdateStatus.SkipCurrentRow

?End If

End Sub

‘C#

?SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

?SqlDataAdapter custDA = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers ORDER BY CustomerID", nwindConn);

?// The Update command checks for optimistic concurrency violations in the WHERE clause.

?custDA.UpdateCommand = new SqlCommand("UPDATE Customers (CustomerID, CompanyName) VALUES(@CustomerID, @CompanyName) " +

??????????????????????????????????????? "WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName", nwindConn);

?custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");

?custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 30, "CompanyName");

?// Pass the original values to the WHERE clause parameters.

?SqlParameter myParm;

?myParm = custDA.UpdateCommand.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");

?myParm.SourceVersion = DataRowVersion.Original;

?myParm = custDA.UpdateCommand.Parameters.Add("@oldCompanyName", SqlDbType.NVarChar, 30, "CompanyName");

?myParm.SourceVersion = DataRowVersion.Original;

?// Add the RowUpdated event handler.

?custDA.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated);

?DataSet custDS = new DataSet();

?custDA.Fill(custDS, "Customers");

?// Modify the DataSet contents.

?custDA.Update(custDS, "Customers");

?foreach (DataRow myRow in custDS.Tables["Customers"].Rows)

?{

??? if (myRow.HasErrors)

????? Console.WriteLine(myRow[0] + ""n" + myRow.RowError);

?}

protected static void OnRowUpdated(object sender, SqlRowUpdatedEventArgs args)

{

?if (args.RecordsAffected == 0)

?{

??? args.Row.RowError = "Optimistic Concurrency Violation Encountered";

??? args.Status = UpdateStatus.SkipCurrentRow;

?}

}

??????? III.協作設計

??????????? 在你寫期間,你應當鎖定DataSet。

??????? IV.僅當需要的時候才使用COM對象訪問ADO

??????????? ADO.NET設計為大量應用程序最好的解決方案。然而一些應用程序需要只有ADO對象才能提供的功能,比如ADOMD。這種情況下可以使用COM對象訪問ADO,注意的是使用COM對象訪問ADO數據會影響應用程序的執行效率。所以在設計應用程序時,首先應該考慮在使用COM對象訪問ADO數據之前,看看ADO.NET是否就滿足你的設計要求。

??? V.ADO.NET和ADO的比較

??????? I.ADO.NET在ADO設計模型的基礎上演變和發展而來,它并不取代COM程序員的ADO,更多地,它是為.NET程序員訪問相關數據源、XML和應用程序數據設計。ADO.NET支持多樣化的發展要求,包括創建數據庫客戶端和供應用程序、工具、語言、WEB瀏覽器等使用的中間層業務對象。ADO.NET與ADO有許多相似的地方。

??????? II.ADO為COM程序員提供了高效的、強大的與數據庫打交道的各種接口。ADO能得到廣泛的運用是因為它支持任何的自動化控制語言(比如VC、VB和腳本語言等)的調用。ADO基礎上升級而來的ADO.NET提供更好的交互平臺和可升級的數據訪問。在ADO.NET中創建一個新的數據訪問API集能提供較之于ADO接口幾個優越的地方,如下所述:

??????????? 改進了與XML的結合

??????????? 隨著XML在應用程序中扮演著越來越重要的角色,與XML結合的ADO.NET就應運而生。為了持續和裝載數據以及數據的XML格式,ADO.NET依賴XML在多層之間或客戶機之間遠程傳遞數據。ADO.NET中使用的特殊XML表述形式提供在任何網絡中十分便利地傳輸數據的方法,包括數據安全邊界。同時,ADO.NET使用XML工具執行確認、分級查詢和數據和數據之間的轉換。

??????????? 綜合.NET框架

??????????? ADO結構如Recordset并不使用常見的設計結構,相反它模擬成一種數據導向。舉例,ADO中的用來導航和得到數據的游標,它的功能性就與其它的比如數組和集合數據結構不同。然而,在ADO.NET中,因為存儲的數據能通過公共的.NET框架結構暴露,包括數組和集合,所以你可以使用一些公共的方法與你的相關數據打交道。

??????????? 改良對離散業務模型的支持

??????????? ADO使用Recordset提供有限的對離散訪問的支持。ADO.NET介紹一個新的對象DataSet,它作為相關數據的一個公共的、存儲的表現形式,在任何時候都被設計為離散的,它與外部數據并不保持持久的連接,它是包裝、存儲、交換、延續和裝載數據的好方法。也就是說任何對數據的操作都是在本地進行,而不直接與真實的數據庫打交道。

??????????? 數據訪問行為的控制是清楚的

??????????? ADO中包括在應用程序中并不總是要求和指定的隱含行為會限制應用程序的性能。而在ADO.NET中提供良好的定義和預先的行為、執行和語義要素組件使得你可以在一個高優化的方式下定位到一個普通的情節上。

??????????? 改善設計階段的支持

??????????? ADO源自執行階段隱含的數據信息,而這種信息是基于花費昂貴代價才獲得的元數據。在ADO.NET中的元數據只是在設計階段起一個杠桿作用,從而提供執行階段更好的性能和更好的穩定性。

??????? III.ADO設計

??????????? 為了更好地理解ADO.NET模型和設計思想,回顧一下ADO的概念是有用的。ADO使用一個單一的對象Recordset與所有數據類型打交道。Recordset被用來處理從數據庫返回的只進流數據、翻卷服務器上數據或者翻卷一批存儲結果集。數據上的改變會立即運用到數據庫上或運用到使用樂觀查詢和更新操作的一批數據上。當你創建一個Recordset時你就明確了你所作的任務,Recordset結果行為的改變主要取決于你要求的Recordset參數。因為ADO使用一個單一的能在很多場合使用的Recordset對象,這使得你的應用程序中的對象模型很簡單。然而,也很難寫一個公用的、可預言的和最優化的代碼,那是因為行為、執行和一個單一對象描述的語義要得到改變很大程度上取決于對象是如何創建和對象訪問的是什么數據。

??????? IV.ADO.NET設計

??????????? ADO.NET是考慮到開發者在訪問和使用數據時共同面對的任務和問題而設計。寧可使用一個單一對象執行大量任務,還不如如ADO.NET中指定每個對象的功能性因素去完成對應的每個任務。ADO中的Recordset功能性被分解成ADO.NET中以下的幾個清楚對象:DataReader,提供快速的、只進的和只讀的訪問去查詢結果;DataSet,存儲數據;DataAdapter,在DataSet和數據源之間架起一道橋梁;ExecuteNonQuery,不返回行;ExecuteScalar,返回一個單一值而不是一個行集。下面是一些詳細說明:

??????????? 只進、只讀數據流

??????????? 應用程序,特別是中間層應用程序,經常要程序化地處理一系列結果,要求在他們讀的時候沒有用戶交互和沒有更新或回滾結果。在ADO中,執行這類數據時使用Recordset的只進游標和只讀鎖。在ADO.NET中,DataReader優化了這種數據的執行性能,它通過提供一個非緩沖、只進和只讀的數據流從數據庫得到數據。

??????????? 返回單一值

??????????? 在ADO中要得到一個單一值,你需要通過創建一個Recordset—〉讀取結果—〉得到單一值—〉關閉Recordset這樣一個過程。在ADO.NET中你就可以使用Command對象的ExecuteScalar方法不需要額外的操作來獲得單一值。

??????????? 離散數據訪問

??????????? ADO使用客戶端游標定位離散數據的訪問,而在ADO.NET中DataSet可以很清楚地實現離散數據的訪問。DataSet能從一個多樣的不同的數據源提供一個公有的、完全離散的數據表現形式,是因為DataSet是完全獨立于數據源的。它不管你數據是從數據庫來的,還是從XML文件來的,抑或是從應用程序中得到的。一個簡單的DataSet可以裝載從多個不同數據庫或非數據庫源的數據。然后使用DataRelation在多個表之間建立一個連接,盡管Recordset的MsDataShape提供者可以實現分級結構查詢,但是DataSet提供更高的穩定性處理離散數據。同時DataSet提供以XML文件格式在遠程客戶端和服務器之間傳輸數據。

??????????? 從數據庫得到數據和更新數據

??????????? ADO.NET提供更好的執行階段性能和可見性。舉例,當使用ADO的Recordset對象進行批更新時,你必須為每個需要改變結果的行使用UPDATE、INSERT或DELETE聲明。ADO產生這些聲明,在執行階段,是需要付出昂貴代價的獲得元數據的。而在ADO.NET中,指定UPDATE、INSERT或DELETE命令就如同自定義業務邏輯(比如一個存儲過程)一樣,你可以使用DataAdapter實現這一切。DataAdapter在DataSet和數據源之間架起一道橋梁。讓你在執行階段就不是如ADO的Recordset一樣需要在數據源中收集元數據信息。從而改善應用程序的執行性能。

??????? V.數據類型

??????????? 在ADO中,所有的結果返回一個Variant數據類型,在ADO.NET中,你可以得到列本身的數據類型。數據類型可以在System.Data.SqlTypes名稱空間定義。

??? W.有關ADO和ADO.NET的詳細介紹,請參考微軟上的資料:ADO.NET for the ADO Programmer

??? 總結:

??? 通過本文,希望與大家共同交流和學習,有不當之處請大家指正,謝謝!


轉載于:https://www.cnblogs.com/feima-lxl/archive/2008/07/12/1241225.html

總結

以上是生活随笔為你收集整理的【转】 ADO.NET最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。

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

精品日本一区二区三区在线观看 | 中文字幕无码av激情不卡 | 牲交欧美兽交欧美 | 亚洲国产精品无码一区二区三区 | 亚洲精品一区二区三区四区五区 | 久久国产36精品色熟妇 | 日本乱人伦片中文三区 | 无码国产乱人伦偷精品视频 | 亚洲啪av永久无码精品放毛片 | 欧美成人高清在线播放 | 国产亚洲精品久久久久久久 | 亚洲中文无码av永久不收费 | 久久精品人妻少妇一区二区三区 | 亚洲成av人片天堂网无码】 | 99精品无人区乱码1区2区3区 | 精品无码成人片一区二区98 | 无码国模国产在线观看 | 精品少妇爆乳无码av无码专区 | 中文字幕无码热在线视频 | 麻豆国产97在线 | 欧洲 | 日本在线高清不卡免费播放 | 久久99精品国产麻豆蜜芽 | 国产人妻人伦精品 | 国产69精品久久久久app下载 | 亚洲一区二区三区偷拍女厕 | 国产在线aaa片一区二区99 | 亚洲国产精品一区二区第一页 | 精品一区二区三区无码免费视频 | 国产精品igao视频网 | 狠狠色噜噜狠狠狠狠7777米奇 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲精品成a人在线观看 | 麻豆av传媒蜜桃天美传媒 | 免费无码的av片在线观看 | 久久国产精品二国产精品 | 欧美日本精品一区二区三区 | 中文无码精品a∨在线观看不卡 | 夜夜高潮次次欢爽av女 | 中文无码伦av中文字幕 | 国语精品一区二区三区 | 国产香蕉尹人综合在线观看 | 国产人妻精品一区二区三区不卡 | 国产成人综合色在线观看网站 | 国产精品人人爽人人做我的可爱 | 四虎国产精品一区二区 | 久久综合给合久久狠狠狠97色 | 丰满诱人的人妻3 | 久久99热只有频精品8 | 内射白嫩少妇超碰 | 亚洲中文字幕在线无码一区二区 | 国产精品高潮呻吟av久久 | 亚洲日韩av一区二区三区中文 | 一本久道久久综合婷婷五月 | 99精品无人区乱码1区2区3区 | 国产精品资源一区二区 | 天天摸天天透天天添 | 久久精品人人做人人综合试看 | 精品日本一区二区三区在线观看 | 亚洲精品综合一区二区三区在线 | 精品人妻人人做人人爽 | 亚洲一区二区三区在线观看网站 | 性欧美牲交xxxxx视频 | 国产手机在线αⅴ片无码观看 | 麻豆国产人妻欲求不满 | 一本久久a久久精品亚洲 | 欧美国产日产一区二区 | 国产人妖乱国产精品人妖 | 亚洲精品一区二区三区四区五区 | 特黄特色大片免费播放器图片 | 撕开奶罩揉吮奶头视频 | 97人妻精品一区二区三区 | 精品国产乱码久久久久乱码 | 亚洲毛片av日韩av无码 | 欧美性猛交xxxx富婆 | 中文精品无码中文字幕无码专区 | 99er热精品视频 | 强伦人妻一区二区三区视频18 | 又大又硬又爽免费视频 | 无码av岛国片在线播放 | 国产女主播喷水视频在线观看 | 成人亚洲精品久久久久软件 | 东京热无码av男人的天堂 | 成人欧美一区二区三区黑人免费 | 99久久婷婷国产综合精品青草免费 | 久久久久久国产精品无码下载 | 天天综合网天天综合色 | 国产一精品一av一免费 | 国内精品久久久久久中文字幕 | 草草网站影院白丝内射 | 久久久精品456亚洲影院 | 激情五月综合色婷婷一区二区 | 亚洲伊人久久精品影院 | 麻豆精品国产精华精华液好用吗 | 亚洲狠狠色丁香婷婷综合 | 又大又黄又粗又爽的免费视频 | 清纯唯美经典一区二区 | 久热国产vs视频在线观看 | 日韩在线不卡免费视频一区 | 双乳奶水饱满少妇呻吟 | 久久久精品人妻久久影视 | 一二三四在线观看免费视频 | 67194成是人免费无码 | 麻花豆传媒剧国产免费mv在线 | 乱人伦人妻中文字幕无码 | 国产精品a成v人在线播放 | 中文字幕无码日韩专区 | 国产精品永久免费视频 | 亲嘴扒胸摸屁股激烈网站 | 国产成人精品无码播放 | aa片在线观看视频在线播放 | 精品久久8x国产免费观看 | 中国女人内谢69xxxxxa片 | 欧美性生交xxxxx久久久 | 欧美人与禽zoz0性伦交 | 亚洲熟悉妇女xxx妇女av | 一区二区三区高清视频一 | 成人三级无码视频在线观看 | 日韩精品乱码av一区二区 | 亚洲无人区一区二区三区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品成人av一区二区三区 | 国产乱子伦视频在线播放 | 国内精品人妻无码久久久影院蜜桃 | 国产精品成人av在线观看 | 欧美怡红院免费全部视频 | 亚洲一区二区三区播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 狠狠色噜噜狠狠狠7777奇米 | 国产av人人夜夜澡人人爽麻豆 | 日本大乳高潮视频在线观看 | 人妻尝试又大又粗久久 | 7777奇米四色成人眼影 | 久久久av男人的天堂 | 午夜丰满少妇性开放视频 | 国产精品成人av在线观看 | 国产真实乱对白精彩久久 | 中文字幕+乱码+中文字幕一区 | 国产乱人伦av在线无码 | 欧美野外疯狂做受xxxx高潮 | 在线视频网站www色 | 午夜性刺激在线视频免费 | 97无码免费人妻超级碰碰夜夜 | 东京一本一道一二三区 | 精品厕所偷拍各类美女tp嘘嘘 | 蜜桃视频韩日免费播放 | 欧美刺激性大交 | 国产精品理论片在线观看 | 日本高清一区免费中文视频 | 国产三级精品三级男人的天堂 | 国产激情艳情在线看视频 | 99久久亚洲精品无码毛片 | 又大又硬又爽免费视频 | 熟妇人妻无乱码中文字幕 | 无套内谢的新婚少妇国语播放 | 国产亚洲精品精品国产亚洲综合 | 性生交片免费无码看人 | 国产亚洲tv在线观看 | 日本精品少妇一区二区三区 | 久热国产vs视频在线观看 | 免费乱码人妻系列无码专区 | 5858s亚洲色大成网站www | 嫩b人妻精品一区二区三区 | 午夜嘿嘿嘿影院 | 国产人妻人伦精品1国产丝袜 | 久久久精品456亚洲影院 | 97久久精品无码一区二区 | 无码人妻出轨黑人中文字幕 | 中文字幕乱妇无码av在线 | 人妻少妇精品视频专区 | 沈阳熟女露脸对白视频 | 国产无遮挡又黄又爽又色 | 欧美精品无码一区二区三区 | 中文字幕人妻丝袜二区 | 九九热爱视频精品 | 成人免费视频在线观看 | 内射巨臀欧美在线视频 | 日本一区二区三区免费播放 | 大胆欧美熟妇xx | 狠狠亚洲超碰狼人久久 | 7777奇米四色成人眼影 | 国产99久久精品一区二区 | 97久久国产亚洲精品超碰热 | 久久久精品456亚洲影院 | 风流少妇按摩来高潮 | 欧美激情内射喷水高潮 | 大肉大捧一进一出视频出来呀 | 久久视频在线观看精品 | 黑人玩弄人妻中文在线 | 久久aⅴ免费观看 | 在线a亚洲视频播放在线观看 | 成人毛片一区二区 | 中文字幕av伊人av无码av | 久久国产精品_国产精品 | 宝宝好涨水快流出来免费视频 | 波多野结衣一区二区三区av免费 | 全球成人中文在线 | 国产片av国语在线观看 | 亚洲男人av天堂午夜在 | 一本久道高清无码视频 | 国产艳妇av在线观看果冻传媒 | 99久久无码一区人妻 | 秋霞成人午夜鲁丝一区二区三区 | 午夜熟女插插xx免费视频 | 国产av无码专区亚洲a∨毛片 | 性啪啪chinese东北女人 | 亚洲欧美日韩国产精品一区二区 | 亚洲精品成人福利网站 | 老熟女乱子伦 | 亚洲经典千人经典日产 | 西西人体www44rt大胆高清 | 黑人玩弄人妻中文在线 | 无码吃奶揉捏奶头高潮视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久久精品国产sm最大网站 | 男人和女人高潮免费网站 | а√天堂www在线天堂小说 | 99国产精品白浆在线观看免费 | 精品国精品国产自在久国产87 | 草草网站影院白丝内射 | 成 人 免费观看网站 | 欧美日韩综合一区二区三区 | 偷窥日本少妇撒尿chinese | 人妻人人添人妻人人爱 | 亚洲精品一区国产 | 午夜福利一区二区三区在线观看 | 嫩b人妻精品一区二区三区 | 欧美丰满熟妇xxxx | 久久亚洲中文字幕无码 | 国产性生大片免费观看性 | 久久精品中文字幕一区 | 亚洲熟悉妇女xxx妇女av | 亚洲精品国偷拍自产在线麻豆 | 男人扒开女人内裤强吻桶进去 | 国产av人人夜夜澡人人爽麻豆 | 国产午夜手机精彩视频 | 大色综合色综合网站 | 午夜熟女插插xx免费视频 | 国产色xx群视频射精 | 最新版天堂资源中文官网 | 天天做天天爱天天爽综合网 | 欧美激情内射喷水高潮 | 亚洲国产精品久久久天堂 | 久久99精品国产麻豆 | 日本欧美一区二区三区乱码 | 亚洲色www成人永久网址 | 国产精品内射视频免费 | 成人无码精品1区2区3区免费看 | 亚洲s码欧洲m码国产av | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲色在线无码国产精品不卡 | 久久午夜无码鲁丝片午夜精品 | 国产综合色产在线精品 | 无码国产色欲xxxxx视频 | 露脸叫床粗话东北少妇 | 国产 浪潮av性色四虎 | 亚拍精品一区二区三区探花 | 中文字幕乱码亚洲无线三区 | 麻豆人妻少妇精品无码专区 | 性啪啪chinese东北女人 | 亚洲中文字幕无码中字 | 国产成人精品一区二区在线小狼 | 99国产精品白浆在线观看免费 | 成人精品天堂一区二区三区 | 国产人成高清在线视频99最全资源 | 国产国语老龄妇女a片 | 亚洲熟悉妇女xxx妇女av | aa片在线观看视频在线播放 | 国产av一区二区精品久久凹凸 | 无码帝国www无码专区色综合 | 中文字幕精品av一区二区五区 | 午夜无码区在线观看 | 国产精品久久久久久亚洲影视内衣 | 97久久精品无码一区二区 | 99久久精品国产一区二区蜜芽 | 色婷婷香蕉在线一区二区 | 久久精品国产99精品亚洲 | 国产激情无码一区二区 | 伊在人天堂亚洲香蕉精品区 | 精品国产av色一区二区深夜久久 | 少妇久久久久久人妻无码 | 中文字幕 亚洲精品 第1页 | 精品久久久无码中文字幕 | 红桃av一区二区三区在线无码av | 亚洲va中文字幕无码久久不卡 | 好屌草这里只有精品 | 无码午夜成人1000部免费视频 | 综合激情五月综合激情五月激情1 | 欧美xxxx黑人又粗又长 | 成人三级无码视频在线观看 | 无码一区二区三区在线 | 色诱久久久久综合网ywww | 亚洲成色www久久网站 | 中国女人内谢69xxxxxa片 | 亚洲成a人一区二区三区 | 无码一区二区三区在线 | 性啪啪chinese东北女人 | 久久国产36精品色熟妇 | 18精品久久久无码午夜福利 | 无码人妻精品一区二区三区不卡 | aⅴ亚洲 日韩 色 图网站 播放 | 久久久精品456亚洲影院 | 国产精品久久久久久无码 | 亚洲男女内射在线播放 | 人人妻人人澡人人爽人人精品 | 人妻人人添人妻人人爱 | 色狠狠av一区二区三区 | 亚洲a无码综合a国产av中文 | 青草青草久热国产精品 | 国产一区二区三区影院 | 精品久久久久香蕉网 | 人人妻人人澡人人爽欧美精品 | 国产精品亚洲一区二区三区喷水 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲の无码国产の无码步美 | 国产成人一区二区三区在线观看 | 亚欧洲精品在线视频免费观看 | 成年美女黄网站色大免费视频 | 午夜精品久久久内射近拍高清 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产亚洲美女精品久久久2020 | 天天拍夜夜添久久精品 | 水蜜桃色314在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品无码国产自产拍在线观看蜜 | 国产成人午夜福利在线播放 | 午夜福利电影 | 日本一本二本三区免费 | 99riav国产精品视频 | 成年美女黄网站色大免费视频 | 丰满少妇人妻久久久久久 | 中文字幕人妻无码一区二区三区 | 亚洲呦女专区 | 无码人妻av免费一区二区三区 | 国产色在线 | 国产 | 久久久无码中文字幕久... | 欧美丰满老熟妇xxxxx性 | 日韩欧美成人免费观看 | 久久成人a毛片免费观看网站 | 麻豆国产人妻欲求不满谁演的 | 精品无码一区二区三区爱欲 | 人妻与老人中文字幕 | 国产av一区二区三区最新精品 | 丰满人妻翻云覆雨呻吟视频 | a在线亚洲男人的天堂 | 亚洲熟妇色xxxxx欧美老妇 | 久久国产精品精品国产色婷婷 | 国产在线精品一区二区三区直播 | 中文字幕无码视频专区 | 亚洲大尺度无码无码专区 | 最近免费中文字幕中文高清百度 | 捆绑白丝粉色jk震动捧喷白浆 | 成人性做爰aaa片免费看 | 国产两女互慰高潮视频在线观看 | 欧美freesex黑人又粗又大 | 少妇性l交大片欧洲热妇乱xxx | 无码人妻出轨黑人中文字幕 | 日韩精品一区二区av在线 | 波多野结衣一区二区三区av免费 | 无码av免费一区二区三区试看 | 真人与拘做受免费视频 | 亚洲精品中文字幕乱码 | 精品久久久无码中文字幕 | 性欧美大战久久久久久久 | 漂亮人妻洗澡被公强 日日躁 | 久久久www成人免费毛片 | 桃花色综合影院 | 国产av无码专区亚洲awww | 无遮无挡爽爽免费视频 | 色偷偷人人澡人人爽人人模 | 精品国产一区av天美传媒 | 无码国模国产在线观看 | 国产av无码专区亚洲a∨毛片 | 亚洲热妇无码av在线播放 | 亚洲成av人片天堂网无码】 | 国产成人无码av一区二区 | 国产真人无遮挡作爱免费视频 | 一本一道久久综合久久 | 人人妻人人澡人人爽欧美一区九九 | 性啪啪chinese东北女人 | 亚洲人成影院在线无码按摩店 | 国产 浪潮av性色四虎 | 亚洲欧洲中文日韩av乱码 | 男女超爽视频免费播放 | 漂亮人妻洗澡被公强 日日躁 | 国产精品亚洲专区无码不卡 | 四虎影视成人永久免费观看视频 | 国产熟妇另类久久久久 | 久久国产劲爆∧v内射 | 少妇人妻av毛片在线看 | 久久综合色之久久综合 | 亚洲精品国产a久久久久久 | 青青青手机频在线观看 | 亚洲区小说区激情区图片区 | 又大又黄又粗又爽的免费视频 | 欧美色就是色 | 97se亚洲精品一区 | 欧美性猛交内射兽交老熟妇 | 中文字幕av无码一区二区三区电影 | 亚洲成av人在线观看网址 | 中文字幕无码视频专区 | 久久 国产 尿 小便 嘘嘘 | 午夜福利试看120秒体验区 | 天堂亚洲免费视频 | 一区二区三区高清视频一 | 少妇无码av无码专区在线观看 | 国产精品va在线播放 | 波多野结衣av一区二区全免费观看 | 亚洲精品www久久久 | 国产人妻久久精品二区三区老狼 | 精品无人区无码乱码毛片国产 | 国产乱码精品一品二品 | 在线精品国产一区二区三区 | 亚洲自偷自拍另类第1页 | 东京一本一道一二三区 | 久久精品国产精品国产精品污 | 无码福利日韩神码福利片 | 成人av无码一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 国产三级久久久精品麻豆三级 | 久久精品丝袜高跟鞋 | 精品国产精品久久一区免费式 | 日日天干夜夜狠狠爱 | 亚洲成av人影院在线观看 | 领导边摸边吃奶边做爽在线观看 | 国产精品自产拍在线观看 | 欧美丰满老熟妇xxxxx性 | 亚洲精品国产品国语在线观看 | 无码吃奶揉捏奶头高潮视频 | 日本va欧美va欧美va精品 | 日日躁夜夜躁狠狠躁 | 亚洲人成影院在线无码按摩店 | 蜜桃视频插满18在线观看 | 国产精品久久国产精品99 | 麻豆人妻少妇精品无码专区 | 久久亚洲中文字幕精品一区 | 精品乱码久久久久久久 | 精品久久久久久亚洲精品 | 特级做a爰片毛片免费69 | 性做久久久久久久久 | 成熟女人特级毛片www免费 | 亚洲国产精品久久人人爱 | 精品国产国产综合精品 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产黄在线观看免费观看不卡 | 男女超爽视频免费播放 | 精品国产精品久久一区免费式 | 色婷婷久久一区二区三区麻豆 | 激情人妻另类人妻伦 | 国产午夜福利100集发布 | 日本肉体xxxx裸交 | 国产精品无码mv在线观看 | 久久精品人人做人人综合试看 | 久久精品国产亚洲精品 | 丰满少妇熟乱xxxxx视频 | 国产区女主播在线观看 | 久久精品国产一区二区三区 | 99久久精品无码一区二区毛片 | 日日麻批免费40分钟无码 | 人妻天天爽夜夜爽一区二区 | 久久久久久久女国产乱让韩 | 国产性生交xxxxx无码 | 狠狠色色综合网站 | 一本加勒比波多野结衣 | 久久久成人毛片无码 | 欧美国产日韩亚洲中文 | 中文字幕无码免费久久9一区9 | 欧美日韩在线亚洲综合国产人 | 亚洲熟悉妇女xxx妇女av | 日本一区二区更新不卡 | 亚洲 激情 小说 另类 欧美 | 啦啦啦www在线观看免费视频 | 澳门永久av免费网站 | 无码毛片视频一区二区本码 | 日产精品高潮呻吟av久久 | 呦交小u女精品视频 | 国产精品第一区揄拍无码 | 台湾无码一区二区 | 亚洲欧洲中文日韩av乱码 | 国产精品丝袜黑色高跟鞋 | 97久久精品无码一区二区 | 久久久国产一区二区三区 | 亚洲欧美综合区丁香五月小说 | 日韩精品无码免费一区二区三区 | 久久人妻内射无码一区三区 | 国产香蕉97碰碰久久人人 | 久久五月精品中文字幕 | 精品人妻人人做人人爽 | 人人澡人人妻人人爽人人蜜桃 | 亚洲人成影院在线观看 | 国产区女主播在线观看 | 国产人妻人伦精品1国产丝袜 | 沈阳熟女露脸对白视频 | 久久午夜夜伦鲁鲁片无码免费 | 性生交片免费无码看人 | 蜜臀aⅴ国产精品久久久国产老师 | 牲交欧美兽交欧美 | 风流少妇按摩来高潮 | 亚洲国产精品久久久天堂 | 天天摸天天碰天天添 | 亚洲人成网站在线播放942 | 亚洲人亚洲人成电影网站色 | 国产在线aaa片一区二区99 | 国产人妻大战黑人第1集 | 国产热a欧美热a在线视频 | 55夜色66夜色国产精品视频 | 亚洲中文字幕无码中文字在线 | 欧美兽交xxxx×视频 | 成人无码影片精品久久久 | 人人妻人人澡人人爽人人精品浪潮 | 最新国产麻豆aⅴ精品无码 | 午夜精品久久久内射近拍高清 | 欧洲熟妇精品视频 | 久久国产精品偷任你爽任你 | 欧美人与禽猛交狂配 | 欧美猛少妇色xxxxx | 国产精品久久久午夜夜伦鲁鲁 | 国产一精品一av一免费 | 帮老师解开蕾丝奶罩吸乳网站 | 色综合久久中文娱乐网 | 国内老熟妇对白xxxxhd | 丰满人妻被黑人猛烈进入 | 日韩视频 中文字幕 视频一区 | 亚拍精品一区二区三区探花 | 日本精品高清一区二区 | 女人被男人爽到呻吟的视频 | 鲁鲁鲁爽爽爽在线视频观看 | 粗大的内捧猛烈进出视频 | 成人一在线视频日韩国产 | 无码人妻丰满熟妇区毛片18 | 欧美xxxx黑人又粗又长 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲热妇无码av在线播放 | 国产无遮挡又黄又爽又色 | 国产精品久久久久7777 | 国产又爽又猛又粗的视频a片 | 国产成人精品三级麻豆 | 中文字幕无码av波多野吉衣 | 又黄又爽又色的视频 | 麻豆国产人妻欲求不满谁演的 | 男女作爱免费网站 | 性啪啪chinese东北女人 | 色一情一乱一伦一视频免费看 | 久久久久国色av免费观看性色 | 久久国产精品二国产精品 | 精品久久久久久亚洲精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 131美女爱做视频 | 99精品国产综合久久久久五月天 | 巨爆乳无码视频在线观看 | 国产午夜亚洲精品不卡 | 国产精品国产自线拍免费软件 | 成人无码影片精品久久久 | 动漫av一区二区在线观看 | 国产又爽又黄又刺激的视频 | 日韩欧美群交p片內射中文 | 丰满少妇高潮惨叫视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久久精品人妻久久影视 | 日本大香伊一区二区三区 | 丰满诱人的人妻3 | 色一情一乱一伦 | 青春草在线视频免费观看 | 中文无码伦av中文字幕 | 熟妇激情内射com | 日本一区二区更新不卡 | 欧美精品无码一区二区三区 | 成 人 免费观看网站 | 久久亚洲a片com人成 | 亚洲人成网站色7799 | 老司机亚洲精品影院无码 | 午夜免费福利小电影 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲欧美国产精品专区久久 | 日日天日日夜日日摸 | 久久国产精品二国产精品 | 色婷婷久久一区二区三区麻豆 | 人妻有码中文字幕在线 | 天天综合网天天综合色 | 图片小说视频一区二区 | 熟女俱乐部五十路六十路av | 日韩人妻系列无码专区 | 日韩精品乱码av一区二区 | 成人毛片一区二区 | 国产精品久久久午夜夜伦鲁鲁 | 久久久婷婷五月亚洲97号色 | 久久久久久a亚洲欧洲av冫 | 免费无码肉片在线观看 | 日本大香伊一区二区三区 | 天干天干啦夜天干天2017 | 亚洲а∨天堂久久精品2021 | 亚洲人交乣女bbw | 中文字幕乱码亚洲无线三区 | 国产亚洲精品久久久久久大师 | 久久 国产 尿 小便 嘘嘘 | 亚洲区欧美区综合区自拍区 | 人妻aⅴ无码一区二区三区 | 一本无码人妻在中文字幕免费 | 亚洲国产精品毛片av不卡在线 | 国产精品免费大片 | 久久久久久国产精品无码下载 | 暴力强奷在线播放无码 | 亚洲午夜无码久久 | 国产亲子乱弄免费视频 | 精品亚洲成av人在线观看 | 亚洲区小说区激情区图片区 | 国产香蕉尹人综合在线观看 | 日韩av无码一区二区三区不卡 | 97精品人妻一区二区三区香蕉 | 国产无av码在线观看 | 偷窥村妇洗澡毛毛多 | 国产偷自视频区视频 | 97久久国产亚洲精品超碰热 | 狂野欧美性猛交免费视频 | а√天堂www在线天堂小说 | 亚洲精品综合五月久久小说 | 99久久久无码国产精品免费 | 国产激情综合五月久久 | 国产熟妇高潮叫床视频播放 | 欧美熟妇另类久久久久久不卡 | 狠狠cao日日穞夜夜穞av | 亚洲综合无码一区二区三区 | 日欧一片内射va在线影院 | 亚洲人成人无码网www国产 | 久久久久亚洲精品中文字幕 | 中文字幕乱码人妻二区三区 | 无遮挡国产高潮视频免费观看 | 亚洲欧洲日本综合aⅴ在线 | 婷婷综合久久中文字幕蜜桃三电影 | 免费人成在线视频无码 | 色五月五月丁香亚洲综合网 | 伦伦影院午夜理论片 | 日韩少妇白浆无码系列 | 狠狠噜狠狠狠狠丁香五月 | 欧美阿v高清资源不卡在线播放 | 三上悠亚人妻中文字幕在线 | 日本精品人妻无码77777 天堂一区人妻无码 | 无码毛片视频一区二区本码 | 国产精品免费大片 | 偷窥日本少妇撒尿chinese | 日本丰满护士爆乳xxxx | 丰满人妻被黑人猛烈进入 | 国产精品自产拍在线观看 | 亚洲色欲久久久综合网东京热 | 狂野欧美激情性xxxx | 国产后入清纯学生妹 | 日韩av无码一区二区三区不卡 | 久久久中文字幕日本无吗 | 精品国产国产综合精品 | 国产卡一卡二卡三 | 偷窥村妇洗澡毛毛多 | 黑人玩弄人妻中文在线 | 中文无码精品a∨在线观看不卡 | 成人试看120秒体验区 | 成熟女人特级毛片www免费 | 久久精品国产日本波多野结衣 | 野狼第一精品社区 | 乱中年女人伦av三区 | 香港三级日本三级妇三级 | 岛国片人妻三上悠亚 | 2020最新国产自产精品 | 欧美人妻一区二区三区 | 久久精品国产99精品亚洲 | 强辱丰满人妻hd中文字幕 | 乱人伦人妻中文字幕无码久久网 | 97久久超碰中文字幕 | 精品欧洲av无码一区二区三区 | 成人影院yy111111在线观看 | 伊人久久大香线蕉午夜 | 性欧美videos高清精品 | 中文字幕无码热在线视频 | 人妻中文无码久热丝袜 | 中文字幕av日韩精品一区二区 | 国产三级精品三级男人的天堂 | 久青草影院在线观看国产 | 欧美阿v高清资源不卡在线播放 | 女人被男人爽到呻吟的视频 | 高清无码午夜福利视频 | 未满小14洗澡无码视频网站 | 国产亚洲美女精品久久久2020 | 精品国产一区二区三区av 性色 | 男人和女人高潮免费网站 | 欧美 日韩 亚洲 在线 | 疯狂三人交性欧美 | 精品久久久中文字幕人妻 | 天海翼激烈高潮到腰振不止 | 久久久久久久人妻无码中文字幕爆 | 国产精品.xx视频.xxtv | 在线观看免费人成视频 | 99久久久无码国产aaa精品 | 国产香蕉尹人综合在线观看 | 欧美xxxx黑人又粗又长 | 无遮无挡爽爽免费视频 | 88国产精品欧美一区二区三区 | 欧美放荡的少妇 | 亚洲男人av天堂午夜在 | 精品偷拍一区二区三区在线看 | 国内少妇偷人精品视频免费 | 丰满少妇人妻久久久久久 | 领导边摸边吃奶边做爽在线观看 | 国产特级毛片aaaaaa高潮流水 | 中文字幕无码免费久久9一区9 | 东京热无码av男人的天堂 | 日本一区二区三区免费播放 | 人人妻在人人 | 国产农村妇女高潮大叫 | 国产精品无码mv在线观看 | 99riav国产精品视频 | 国产精品久久久久久亚洲毛片 | 日日橹狠狠爱欧美视频 | 欧美变态另类xxxx | 大屁股大乳丰满人妻 | 免费网站看v片在线18禁无码 | 久久99精品国产.久久久久 | 夜夜躁日日躁狠狠久久av | 国产精品免费大片 | 亚洲色偷偷偷综合网 | 少妇一晚三次一区二区三区 | 人妻尝试又大又粗久久 | 国产av无码专区亚洲a∨毛片 | 亚洲区欧美区综合区自拍区 | 亚洲精品鲁一鲁一区二区三区 | 久久久久成人片免费观看蜜芽 | 99精品国产综合久久久久五月天 | 夜精品a片一区二区三区无码白浆 | 国产在线一区二区三区四区五区 | 国产精品怡红院永久免费 | 国产高清av在线播放 | 任你躁国产自任一区二区三区 | 粉嫩少妇内射浓精videos | 日韩成人一区二区三区在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产无遮挡又黄又爽免费视频 | 高清国产亚洲精品自在久久 | 日韩精品无码一区二区中文字幕 | 香蕉久久久久久av成人 | 熟妇人妻激情偷爽文 | 波多野结衣av一区二区全免费观看 | 国产精品久久福利网站 | 影音先锋中文字幕无码 | 精品乱码久久久久久久 | 国产又爽又黄又刺激的视频 | 中文字幕乱码中文乱码51精品 | 日日麻批免费40分钟无码 | 日本www一道久久久免费榴莲 | 日韩人妻系列无码专区 | 亚洲中文字幕在线无码一区二区 | 久久亚洲精品中文字幕无男同 | 亚洲精品国产精品乱码不卡 | 国产成人精品优优av | 人人妻在人人 | 午夜免费福利小电影 | 大肉大捧一进一出好爽视频 | 噜噜噜亚洲色成人网站 | 中文字幕av无码一区二区三区电影 | 7777奇米四色成人眼影 | 国产办公室秘书无码精品99 | 久久五月精品中文字幕 | 伦伦影院午夜理论片 | 久久综合香蕉国产蜜臀av | 午夜嘿嘿嘿影院 | 久久精品国产精品国产精品污 | 国产偷抇久久精品a片69 | 18禁黄网站男男禁片免费观看 | 99re在线播放 | 久久精品人人做人人综合 | 亚洲男女内射在线播放 | 中文字幕无码av波多野吉衣 | 久久国产自偷自偷免费一区调 | 日日噜噜噜噜夜夜爽亚洲精品 | 任你躁国产自任一区二区三区 | 在线亚洲高清揄拍自拍一品区 | 欧美高清在线精品一区 | 欧美老妇交乱视频在线观看 | 综合激情五月综合激情五月激情1 | 国产av一区二区精品久久凹凸 | 日本一卡二卡不卡视频查询 | 亚洲精品一区二区三区婷婷月 | 国产口爆吞精在线视频 | 久久亚洲国产成人精品性色 | 强奷人妻日本中文字幕 | 四虎影视成人永久免费观看视频 | 国产精品成人av在线观看 | 日日天干夜夜狠狠爱 | 成年美女黄网站色大免费全看 | 人妻熟女一区 | 国产超碰人人爽人人做人人添 | 日韩精品无码一区二区中文字幕 | 国内精品九九久久久精品 | 精品日本一区二区三区在线观看 | 日本又色又爽又黄的a片18禁 | 俺去俺来也www色官网 | 国精产品一品二品国精品69xx | 国产精品无码一区二区桃花视频 | 国产农村妇女高潮大叫 | 人妻与老人中文字幕 | 日韩av无码中文无码电影 | 色综合天天综合狠狠爱 | 亚洲欧美色中文字幕在线 | 天堂一区人妻无码 | 99麻豆久久久国产精品免费 | 亚洲日本va午夜在线电影 | 人妻人人添人妻人人爱 | 亚洲成av人影院在线观看 | 久久久久亚洲精品中文字幕 | 美女毛片一区二区三区四区 | 欧美精品一区二区精品久久 | 精品亚洲成av人在线观看 | 色欲综合久久中文字幕网 | 国产舌乚八伦偷品w中 | 日本又色又爽又黄的a片18禁 | 九九在线中文字幕无码 | 久久精品99久久香蕉国产色戒 | 熟女少妇在线视频播放 | 在线观看免费人成视频 | 67194成是人免费无码 | 亚洲区小说区激情区图片区 | 波多野结衣乳巨码无在线观看 | 无码乱肉视频免费大全合集 | 日本一区二区三区免费播放 | 国产精品国产自线拍免费软件 | 99国产欧美久久久精品 | 色欲av亚洲一区无码少妇 | 一个人看的视频www在线 | 性欧美牲交xxxxx视频 | 无遮无挡爽爽免费视频 | 亚洲成熟女人毛毛耸耸多 | 激情内射亚州一区二区三区爱妻 | 国产成人综合色在线观看网站 | 久久综合久久自在自线精品自 | 在线 国产 欧美 亚洲 天堂 | 久久久精品456亚洲影院 | 日韩精品一区二区av在线 | 国产精品99久久精品爆乳 | 漂亮人妻洗澡被公强 日日躁 | 精品无码一区二区三区爱欲 | 老头边吃奶边弄进去呻吟 | 少妇高潮一区二区三区99 | 国精产品一区二区三区 | 国产亚洲日韩欧美另类第八页 | 欧美大屁股xxxxhd黑色 | 午夜福利不卡在线视频 | 欧美 日韩 亚洲 在线 | 欧美熟妇另类久久久久久多毛 | 真人与拘做受免费视频一 | 波多野结衣 黑人 | 人妻少妇精品无码专区二区 | 免费网站看v片在线18禁无码 | 国产一区二区不卡老阿姨 | 麻豆国产人妻欲求不满谁演的 | 强伦人妻一区二区三区视频18 | 无码任你躁久久久久久久 | 久久综合狠狠综合久久综合88 | 国产亲子乱弄免费视频 | 亚洲大尺度无码无码专区 | 日韩在线不卡免费视频一区 | 中文字幕色婷婷在线视频 | 欧美日本日韩 | 蜜桃无码一区二区三区 | 一区二区三区高清视频一 | 伊人久久大香线蕉午夜 | 国产成人人人97超碰超爽8 | 999久久久国产精品消防器材 | 波多野42部无码喷潮在线 | 国产精品美女久久久网av | 荡女精品导航 | 久久久成人毛片无码 | 国产精品内射视频免费 | 国产乱人无码伦av在线a | 亚洲人成影院在线无码按摩店 | 日韩亚洲欧美精品综合 | 亚洲国产精品久久久久久 | 国产精品99久久精品爆乳 | 欧美日韩精品 | 国产精品久久久久9999小说 | 18禁止看的免费污网站 | 欧洲美熟女乱又伦 | 无码人妻少妇伦在线电影 | 少妇被黑人到高潮喷出白浆 | 九九热爱视频精品 | 色爱情人网站 | 免费观看激色视频网站 | 熟女俱乐部五十路六十路av | 免费男性肉肉影院 | 精品国产一区二区三区av 性色 | 亚洲乱码中文字幕在线 | 国产在线aaa片一区二区99 | 亚拍精品一区二区三区探花 | 欧美熟妇另类久久久久久多毛 | 老熟妇仑乱视频一区二区 | 欧美人与禽zoz0性伦交 | 国产精品久久久久7777 | 扒开双腿吃奶呻吟做受视频 | 日本乱偷人妻中文字幕 | 亚洲日韩一区二区三区 | 国产亚洲美女精品久久久2020 | 亚洲人成影院在线无码按摩店 | 久久99久久99精品中文字幕 | 亚欧洲精品在线视频免费观看 | 国产成人无码a区在线观看视频app | 色综合天天综合狠狠爱 | 色噜噜亚洲男人的天堂 | 国产sm调教视频在线观看 | 风流少妇按摩来高潮 | 国产内射爽爽大片视频社区在线 | 国产黑色丝袜在线播放 | 俺去俺来也在线www色官网 | 在线欧美精品一区二区三区 | 亚洲熟妇色xxxxx亚洲 | 高清不卡一区二区三区 | 男女下面进入的视频免费午夜 | 欧美人与禽猛交狂配 | 国产精品国产自线拍免费软件 | 四虎国产精品一区二区 | 国产国语老龄妇女a片 | 婷婷丁香五月天综合东京热 | 欧美老熟妇乱xxxxx | 国产精品办公室沙发 | 国产精品无码久久av | 一本久久伊人热热精品中文字幕 | 欧美一区二区三区视频在线观看 | 蜜臀av无码人妻精品 | 女人被爽到呻吟gif动态图视看 | 欧美 丝袜 自拍 制服 另类 | 精品人妻人人做人人爽夜夜爽 | 国产成人无码a区在线观看视频app | 丰满护士巨好爽好大乳 | 国内精品久久久久久中文字幕 | 精品厕所偷拍各类美女tp嘘嘘 | 国产熟妇另类久久久久 | 久久精品女人的天堂av | 国产av一区二区精品久久凹凸 | 中文字幕人妻无码一夲道 | 成人三级无码视频在线观看 | 麻豆精品国产精华精华液好用吗 | 亲嘴扒胸摸屁股激烈网站 | 日本乱偷人妻中文字幕 | 国产国语老龄妇女a片 | 色欲久久久天天天综合网精品 | 亚洲国产成人a精品不卡在线 | 久久久久久av无码免费看大片 | 久久亚洲中文字幕精品一区 | 日韩在线不卡免费视频一区 | 无码精品国产va在线观看dvd | 欧美刺激性大交 | 呦交小u女精品视频 | 国产欧美亚洲精品a | 国产成人一区二区三区别 | 久激情内射婷内射蜜桃人妖 | 国产午夜福利亚洲第一 | 成人亚洲精品久久久久软件 | 粉嫩少妇内射浓精videos | 午夜精品久久久久久久久 | 亚洲 欧美 激情 小说 另类 | 小sao货水好多真紧h无码视频 | 国产精品理论片在线观看 | 亚洲人成无码网www | 啦啦啦www在线观看免费视频 | 国产精品a成v人在线播放 | 一本久道高清无码视频 | 人妻少妇精品久久 | 中文字幕人妻无码一夲道 | 内射巨臀欧美在线视频 | 国产精品久久久久影院嫩草 | 青青草原综合久久大伊人精品 | 久久亚洲精品中文字幕无男同 | 少妇人妻av毛片在线看 | 丰满妇女强制高潮18xxxx | 亚洲国产精品一区二区第一页 | 国产成人精品一区二区在线小狼 | 国产真实伦对白全集 | 日韩精品久久久肉伦网站 | 久久这里只有精品视频9 | 久久亚洲日韩精品一区二区三区 | 天天拍夜夜添久久精品大 | av无码电影一区二区三区 | 又粗又大又硬又长又爽 | 天天摸天天碰天天添 | 成 人影片 免费观看 | 国产午夜手机精彩视频 | 国产精品无码一区二区桃花视频 | 爽爽影院免费观看 | 欧美午夜特黄aaaaaa片 | 亚洲精品综合一区二区三区在线 | 99精品无人区乱码1区2区3区 | 狠狠综合久久久久综合网 | 欧美日韩一区二区三区自拍 | 亚洲色欲色欲欲www在线 | 天天综合网天天综合色 | 久久久久久久久蜜桃 | 欧美日韩人成综合在线播放 | 欧美色就是色 | 精品日本一区二区三区在线观看 | 成年女人永久免费看片 | 熟女俱乐部五十路六十路av | 久久99精品国产.久久久久 | 日韩欧美中文字幕公布 | 精品人妻人人做人人爽 | 扒开双腿疯狂进出爽爽爽视频 | 精品乱码久久久久久久 | 中文字幕人成乱码熟女app | 日本熟妇乱子伦xxxx | 夜夜夜高潮夜夜爽夜夜爰爰 | 麻豆国产人妻欲求不满 | 一本色道久久综合狠狠躁 | 在线看片无码永久免费视频 | 午夜福利电影 | 亚洲无人区午夜福利码高清完整版 | 精品久久久无码人妻字幂 | 中文字幕av无码一区二区三区电影 | 亚洲日韩一区二区三区 | 沈阳熟女露脸对白视频 | 亚洲国产av精品一区二区蜜芽 | 亚洲区欧美区综合区自拍区 | 精品人妻人人做人人爽夜夜爽 | 性色av无码免费一区二区三区 | 久久视频在线观看精品 | 无码免费一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产成人人人97超碰超爽8 | 精品少妇爆乳无码av无码专区 | 国产97人人超碰caoprom | 网友自拍区视频精品 | 久久国产精品精品国产色婷婷 | 久久久久亚洲精品中文字幕 | 日韩精品无码一本二本三本色 | а天堂中文在线官网 | 好爽又高潮了毛片免费下载 | 精品国产一区av天美传媒 | 欧美第一黄网免费网站 | 成人免费无码大片a毛片 | 无码精品国产va在线观看dvd | 乱人伦中文视频在线观看 | 日本又色又爽又黄的a片18禁 | 曰韩无码二三区中文字幕 | 少妇一晚三次一区二区三区 | 成人aaa片一区国产精品 | 亚洲精品午夜无码电影网 | 色欲综合久久中文字幕网 | 久久99精品久久久久久 | 2019nv天堂香蕉在线观看 | 国产激情无码一区二区 | 亚洲aⅴ无码成人网站国产app | 成年美女黄网站色大免费视频 | 丰满肥臀大屁股熟妇激情视频 | 真人与拘做受免费视频一 | 亚洲第一网站男人都懂 | 国产真实夫妇视频 | 精品一区二区三区波多野结衣 | www国产亚洲精品久久网站 | 免费无码av一区二区 | 国产熟妇另类久久久久 | 激情五月综合色婷婷一区二区 | 中文字幕无线码 | 中文字幕乱妇无码av在线 | 一本一道久久综合久久 | 熟女少妇在线视频播放 | 日本乱偷人妻中文字幕 | 久久视频在线观看精品 | 久久无码中文字幕免费影院蜜桃 | 日韩精品a片一区二区三区妖精 | 给我免费的视频在线观看 | 久久精品成人欧美大片 | 野外少妇愉情中文字幕 | 麻豆成人精品国产免费 | 男人的天堂av网站 | 成人亚洲精品久久久久 | 中文字幕乱码亚洲无线三区 | 四虎国产精品免费久久 | 国内综合精品午夜久久资源 | 国产超碰人人爽人人做人人添 | www国产精品内射老师 | 精品国产青草久久久久福利 | 少妇被黑人到高潮喷出白浆 | 国产在线一区二区三区四区五区 | 日韩精品无码免费一区二区三区 | 国产亚洲精品久久久久久久 | 国产成人精品优优av | 日本一卡2卡3卡四卡精品网站 | 麻豆av传媒蜜桃天美传媒 | 国产性生交xxxxx无码 | 天天爽夜夜爽夜夜爽 | 东京热无码av男人的天堂 | 久久综合色之久久综合 | 日本高清一区免费中文视频 | 在线视频网站www色 | 波多野42部无码喷潮在线 | 欧美日韩在线亚洲综合国产人 | 三上悠亚人妻中文字幕在线 | 天堂无码人妻精品一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 国产激情艳情在线看视频 | 亚洲国精产品一二二线 | 国产麻豆精品精东影业av网站 | 激情人妻另类人妻伦 | 精品久久8x国产免费观看 | 无码人妻丰满熟妇区毛片18 | 亚洲人成影院在线无码按摩店 | 欧美人与物videos另类 | 国产精品内射视频免费 | 国内少妇偷人精品视频免费 | 在线 国产 欧美 亚洲 天堂 | 国产免费久久久久久无码 | 99精品久久毛片a片 | 久久99久久99精品中文字幕 | 人人澡人人妻人人爽人人蜜桃 | 国产xxx69麻豆国语对白 | 免费国产黄网站在线观看 | 无套内谢老熟女 | 成人免费视频一区二区 | 成人影院yy111111在线观看 | 宝宝好涨水快流出来免费视频 | 国内少妇偷人精品视频免费 | 麻豆国产人妻欲求不满谁演的 | 亚洲国产一区二区三区在线观看 | 亚洲大尺度无码无码专区 | 思思久久99热只有频精品66 | 无码人妻久久一区二区三区不卡 | 一本精品99久久精品77 | 无码av免费一区二区三区试看 | 丝袜人妻一区二区三区 | √天堂资源地址中文在线 | 亚洲一区二区观看播放 | 啦啦啦www在线观看免费视频 | 国产精品理论片在线观看 | 欧美精品无码一区二区三区 | 亚洲精品www久久久 | 在线 国产 欧美 亚洲 天堂 | 亚洲中文字幕在线无码一区二区 | 少妇无套内谢久久久久 | 动漫av网站免费观看 | 亚洲成a人片在线观看无码3d | 欧美激情综合亚洲一二区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲精品国产品国语在线观看 | 少妇无码av无码专区在线观看 | 在线观看欧美一区二区三区 | 久久久国产精品无码免费专区 | 99久久久无码国产aaa精品 | 5858s亚洲色大成网站www | 亚洲国产精品无码久久久久高潮 | 中文字幕日韩精品一区二区三区 | 久久午夜无码鲁丝片 | 午夜熟女插插xx免费视频 | 日韩av无码一区二区三区 | 对白脏话肉麻粗话av | 宝宝好涨水快流出来免费视频 | 欧美性生交活xxxxxdddd | 国产欧美精品一区二区三区 | 未满小14洗澡无码视频网站 | 婷婷综合久久中文字幕蜜桃三电影 | 久热国产vs视频在线观看 | 午夜精品久久久内射近拍高清 | 老熟妇乱子伦牲交视频 | 色诱久久久久综合网ywww | 亚洲天堂2017无码中文 | 人妻少妇精品无码专区动漫 | 婷婷五月综合缴情在线视频 | 狠狠亚洲超碰狼人久久 | 97无码免费人妻超级碰碰夜夜 | 国产精品18久久久久久麻辣 | 久久精品国产亚洲精品 | 国产精品第一区揄拍无码 | 乱人伦人妻中文字幕无码 | 精品国产福利一区二区 | 国精产品一品二品国精品69xx | 丰满少妇熟乱xxxxx视频 | 精品国偷自产在线 | 无码任你躁久久久久久久 | 精品夜夜澡人妻无码av蜜桃 | 日本一区二区三区免费播放 | 中国女人内谢69xxxx | 亚洲熟妇色xxxxx欧美老妇 | 男女猛烈xx00免费视频试看 | 最新版天堂资源中文官网 | 亚洲最大成人网站 | 亚洲国产高清在线观看视频 | 中文字幕无码日韩欧毛 | 欧美日韩一区二区三区自拍 | 国产无套内射久久久国产 | 丰满少妇人妻久久久久久 | 国产高清不卡无码视频 | 曰韩少妇内射免费播放 | 日本一卡2卡3卡四卡精品网站 | 全球成人中文在线 | 狠狠cao日日穞夜夜穞av | 欧美刺激性大交 | 精品成人av一区二区三区 | 国产在线精品一区二区三区直播 | 激情国产av做激情国产爱 | 人妻少妇精品久久 | 欧美成人高清在线播放 | 妺妺窝人体色www婷婷 | 国产精品久久福利网站 | 亚洲中文字幕成人无码 | 牲欲强的熟妇农村老妇女视频 | 丰满少妇高潮惨叫视频 | 青青青爽视频在线观看 | 亚洲精品国产a久久久久久 | 日韩人妻无码一区二区三区久久99 | 国产在线aaa片一区二区99 | 亚洲毛片av日韩av无码 | 日韩欧美中文字幕在线三区 | 国产sm调教视频在线观看 | 久久久无码中文字幕久... | 好男人社区资源 | 老熟女重囗味hdxx69 | 人人妻人人澡人人爽人人精品浪潮 | 秋霞特色aa大片 | 日韩无码专区 | 草草网站影院白丝内射 | 妺妺窝人体色www在线小说 | 国精品人妻无码一区二区三区蜜柚 | 国产又粗又硬又大爽黄老大爷视 | 日本欧美一区二区三区乱码 | 又粗又大又硬毛片免费看 | 国产精品永久免费视频 | 自拍偷自拍亚洲精品10p | 国产一区二区三区四区五区加勒比 | 成人欧美一区二区三区 | 激情内射亚州一区二区三区爱妻 | 久久精品国产一区二区三区肥胖 | 青青草原综合久久大伊人精品 | 无码国内精品人妻少妇 | 精品人人妻人人澡人人爽人人 | 亚洲精品成人福利网站 | 亚洲精品美女久久久久久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲日本va中文字幕 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 无码人妻少妇伦在线电影 | 国产人妻精品一区二区三区不卡 | 精品久久久久久人妻无码中文字幕 | 色婷婷欧美在线播放内射 | 日韩少妇内射免费播放 | 粉嫩少妇内射浓精videos | 亚洲国精产品一二二线 | 四虎4hu永久免费 | 内射爽无广熟女亚洲 | 国产成人av免费观看 | 国产精品沙发午睡系列 | 无码国内精品人妻少妇 | 国产成人无码午夜视频在线观看 | 久久精品女人天堂av免费观看 | 无码av最新清无码专区吞精 | 亚洲国产日韩a在线播放 | 国产内射爽爽大片视频社区在线 | 欧美性生交xxxxx久久久 | 国精产品一区二区三区 | 伦伦影院午夜理论片 | 网友自拍区视频精品 | 精品久久8x国产免费观看 | 亚洲国产精品美女久久久久 | 亚洲人成无码网www | 性色欲网站人妻丰满中文久久不卡 | 国产亚洲日韩欧美另类第八页 | 日日摸夜夜摸狠狠摸婷婷 | 在线天堂新版最新版在线8 | 亚洲aⅴ无码成人网站国产app | 精品一区二区不卡无码av | 亚洲国产高清在线观看视频 | 牲欲强的熟妇农村老妇女 | 精品熟女少妇av免费观看 | 国产精品久久福利网站 | 在线天堂新版最新版在线8 | 中文字幕av日韩精品一区二区 | 无码乱肉视频免费大全合集 | 亚洲精品午夜无码电影网 | 中文字幕久久久久人妻 | 欧美熟妇另类久久久久久多毛 | 99久久99久久免费精品蜜桃 | 成人无码影片精品久久久 | 国产av无码专区亚洲a∨毛片 | 撕开奶罩揉吮奶头视频 | 国产人妻久久精品二区三区老狼 | 国产成人精品优优av | 精品国精品国产自在久国产87 | 台湾无码一区二区 | 爆乳一区二区三区无码 | 最新版天堂资源中文官网 | 日韩av无码一区二区三区不卡 | 久久zyz资源站无码中文动漫 | 欧洲vodafone精品性 | 日日摸日日碰夜夜爽av | 久久久久久久久蜜桃 | 亚拍精品一区二区三区探花 | 欧美xxxxx精品 | 丰满人妻被黑人猛烈进入 | 久久综合九色综合97网 | 久久人人97超碰a片精品 | 免费网站看v片在线18禁无码 | 国内丰满熟女出轨videos | 色综合视频一区二区三区 | 亚洲精品成a人在线观看 | 亚洲一区二区观看播放 | 国产成人无码区免费内射一片色欲 | 夜夜躁日日躁狠狠久久av | 色窝窝无码一区二区三区色欲 | 少妇愉情理伦片bd | 欧美野外疯狂做受xxxx高潮 | 一本久久a久久精品亚洲 | 国产综合色产在线精品 | 熟女少妇人妻中文字幕 | 国产成人无码午夜视频在线观看 | 麻豆精品国产精华精华液好用吗 | 亚洲中文字幕无码一久久区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产人妻精品一区二区三区 | 大胆欧美熟妇xx | 粗大的内捧猛烈进出视频 | 精品成人av一区二区三区 | 久久综合色之久久综合 | 四十如虎的丰满熟妇啪啪 | 国产一精品一av一免费 | 国产成人精品久久亚洲高清不卡 | 99精品国产综合久久久久五月天 | 亚洲啪av永久无码精品放毛片 | 亚洲日本va午夜在线电影 | 欧美乱妇无乱码大黄a片 | 夜夜躁日日躁狠狠久久av | 男人扒开女人内裤强吻桶进去 | 18无码粉嫩小泬无套在线观看 | 亚洲国产av美女网站 | 国产97色在线 | 免 | 牛和人交xxxx欧美 | 国产欧美亚洲精品a | 国产免费久久久久久无码 | 亚洲色成人中文字幕网站 | 欧美丰满少妇xxxx性 | 蜜桃臀无码内射一区二区三区 | 麻豆国产97在线 | 欧洲 | 国产xxx69麻豆国语对白 | 精品无码成人片一区二区98 | 爆乳一区二区三区无码 | 亚洲日韩精品欧美一区二区 | 亚洲 高清 成人 动漫 | 国模大胆一区二区三区 | 国产精品18久久久久久麻辣 | 天天综合网天天综合色 | 老司机亚洲精品影院无码 | 欧美成人免费全部网站 | 精品偷自拍另类在线观看 | 鲁一鲁av2019在线 | 成人一区二区免费视频 | 久久久精品欧美一区二区免费 | 国产精品多人p群无码 | 99久久婷婷国产综合精品青草免费 | 熟女少妇在线视频播放 | 国产精品爱久久久久久久 | 国产莉萝无码av在线播放 | 宝宝好涨水快流出来免费视频 | 偷窥村妇洗澡毛毛多 | 又粗又大又硬又长又爽 | 无码福利日韩神码福利片 | 久久99精品久久久久久 | 国产精品久久久久9999小说 | 久在线观看福利视频 | 无码国产激情在线观看 | 日本精品高清一区二区 | 国产精品亚洲专区无码不卡 | 久久精品人妻少妇一区二区三区 | 丰满诱人的人妻3 | 噜噜噜亚洲色成人网站 | 日韩精品成人一区二区三区 | 国产女主播喷水视频在线观看 | 欧美日韩久久久精品a片 | 中文字幕无码av激情不卡 | 国产精品亚洲综合色区韩国 | 国产免费无码一区二区视频 | 一个人看的视频www在线 | 国产精品鲁鲁鲁 | 亚洲国产精品一区二区第一页 | 久久婷婷五月综合色国产香蕉 | 亚洲精品国产第一综合99久久 | 日本欧美一区二区三区乱码 | 麻豆人妻少妇精品无码专区 | 精品国产麻豆免费人成网站 | 国产成人人人97超碰超爽8 | 国产真实乱对白精彩久久 | 老熟女乱子伦 | 日日天干夜夜狠狠爱 | 欧美高清在线精品一区 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲成av人片在线观看无码不卡 | 亚洲国产精品毛片av不卡在线 | 欧美熟妇另类久久久久久多毛 | 久久人妻内射无码一区三区 | 动漫av网站免费观看 | 成人欧美一区二区三区黑人 | 日日鲁鲁鲁夜夜爽爽狠狠 | 女人和拘做爰正片视频 | 亚洲精品国产精品乱码不卡 | 国产麻豆精品精东影业av网站 | 图片小说视频一区二区 | 中文久久乱码一区二区 | 麻豆国产丝袜白领秘书在线观看 | 国产亚洲美女精品久久久2020 | 国产麻豆精品一区二区三区v视界 | 中文字幕乱码亚洲无线三区 | 久久天天躁狠狠躁夜夜免费观看 | 爽爽影院免费观看 | 国产精品香蕉在线观看 | 国产人妻精品午夜福利免费 | 动漫av网站免费观看 | 欧美日韩视频无码一区二区三 | 亚洲欧洲中文日韩av乱码 | 兔费看少妇性l交大片免费 | 日产精品99久久久久久 | 久久国产精品二国产精品 | 国产午夜手机精彩视频 | 一本色道久久综合亚洲精品不卡 | 国产精品福利视频导航 | 国产精品a成v人在线播放 | 一本色道久久综合亚洲精品不卡 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 激情综合激情五月俺也去 | 亚洲欧美国产精品久久 | 亚洲日本在线电影 | 无码任你躁久久久久久久 | 国产做国产爱免费视频 | 中文字幕乱码亚洲无线三区 | 亚洲aⅴ无码成人网站国产app | 久久精品国产大片免费观看 | 国产精品人人爽人人做我的可爱 | 人妻与老人中文字幕 | 午夜精品一区二区三区的区别 | 动漫av一区二区在线观看 | 久久久久亚洲精品男人的天堂 | 国产人妻大战黑人第1集 | 精品无码国产一区二区三区av | 中文久久乱码一区二区 | 黑人巨大精品欧美一区二区 | 久久www免费人成人片 | 亚洲国产精品美女久久久久 | 欧美 日韩 亚洲 在线 | 一本久久a久久精品亚洲 | 成人欧美一区二区三区黑人 | www国产精品内射老师 | 成人片黄网站色大片免费观看 | 成在人线av无码免观看麻豆 | 精品国偷自产在线视频 | 免费国产黄网站在线观看 | 久久zyz资源站无码中文动漫 | 狠狠色丁香久久婷婷综合五月 | 成熟女人特级毛片www免费 | 性做久久久久久久免费看 | 99久久久无码国产精品免费 | 少妇高潮一区二区三区99 | 欧美日韩久久久精品a片 | 人人妻人人澡人人爽人人精品 | 美女张开腿让人桶 | 国产精品无套呻吟在线 | | 欧美精品国产综合久久 | 波多野结衣av在线观看 | 丰满肥臀大屁股熟妇激情视频 | 人妻中文无码久热丝袜 | 成人精品天堂一区二区三区 | 99精品无人区乱码1区2区3区 | 日本饥渴人妻欲求不满 | 99久久久无码国产aaa精品 | 国产精品无套呻吟在线 | 国内精品一区二区三区不卡 | aⅴ亚洲 日韩 色 图网站 播放 | 高清国产亚洲精品自在久久 | 美女毛片一区二区三区四区 | 欧美喷潮久久久xxxxx | 亚洲色欲久久久综合网东京热 | 老太婆性杂交欧美肥老太 | 国产97色在线 | 免 | 久久午夜无码鲁丝片午夜精品 | 欧美 日韩 人妻 高清 中文 | 亚洲a无码综合a国产av中文 | 蜜臀av无码人妻精品 | 熟妇女人妻丰满少妇中文字幕 | 任你躁国产自任一区二区三区 | 亚洲中文字幕无码一久久区 | 日本乱人伦片中文三区 | 亚洲国产精品无码久久久久高潮 | 爽爽影院免费观看 | 一二三四社区在线中文视频 | 国产极品视觉盛宴 | 99精品国产综合久久久久五月天 | 天天摸天天透天天添 | 国产卡一卡二卡三 | 国产成人无码区免费内射一片色欲 | 日本xxxx色视频在线观看免费 | 欧美日韩视频无码一区二区三 | 久久人妻内射无码一区三区 | 日韩视频 中文字幕 视频一区 | 午夜福利不卡在线视频 | 牲欲强的熟妇农村老妇女 | 欧美乱妇无乱码大黄a片 | 亚洲爆乳无码专区 | 亚洲中文字幕无码中文字在线 | 天堂久久天堂av色综合 | 亚洲欧美精品aaaaaa片 | 国产又爽又猛又粗的视频a片 | 人妻尝试又大又粗久久 | 国产乱人偷精品人妻a片 | 麻豆国产97在线 | 欧洲 | 国产suv精品一区二区五 | 少妇人妻大乳在线视频 | 亚洲色www成人永久网址 | v一区无码内射国产 | 久久综合九色综合97网 | 77777熟女视频在线观看 а天堂中文在线官网 | 爱做久久久久久 | 天堂亚洲2017在线观看 | 天堂亚洲2017在线观看 | 亚洲色无码一区二区三区 | 夜精品a片一区二区三区无码白浆 | 亚洲精品久久久久中文第一幕 | 无码av中文字幕免费放 | 久久人人爽人人爽人人片av高清 | 久久综合久久自在自线精品自 | 亚洲无人区一区二区三区 | 免费无码一区二区三区蜜桃大 | 扒开双腿疯狂进出爽爽爽视频 | 动漫av网站免费观看 | 精品久久久无码中文字幕 | 亚洲精品国产第一综合99久久 | 国语精品一区二区三区 | 亚洲精品一区三区三区在线观看 | 国产欧美亚洲精品a | 国产香蕉尹人视频在线 | 麻豆国产97在线 | 欧洲 | 国产成人久久精品流白浆 | 久久人人爽人人人人片 | 熟妇激情内射com | 老太婆性杂交欧美肥老太 | 精品无人国产偷自产在线 | 久久久久久av无码免费看大片 | 影音先锋中文字幕无码 | 久久99国产综合精品 | 又粗又大又硬毛片免费看 | 午夜精品一区二区三区在线观看 | 日韩在线不卡免费视频一区 | 日本护士毛茸茸高潮 | 欧美日本免费一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 丝袜 中出 制服 人妻 美腿 | 国内精品久久久久久中文字幕 | 人人爽人人澡人人人妻 | 亚洲国产日韩a在线播放 | 亚洲欧美日韩成人高清在线一区 | 好屌草这里只有精品 | 99久久婷婷国产综合精品青草免费 | 欧美怡红院免费全部视频 | 少妇久久久久久人妻无码 | 国产精品嫩草久久久久 | 青草青草久热国产精品 | 天天摸天天碰天天添 | 精品久久久中文字幕人妻 | 奇米影视7777久久精品 | 亚洲精品国产精品乱码不卡 | 99国产欧美久久久精品 | 成人免费视频视频在线观看 免费 | 成年美女黄网站色大免费视频 | 久久精品国产日本波多野结衣 | 婷婷丁香五月天综合东京热 | 色一情一乱一伦一区二区三欧美 | 野外少妇愉情中文字幕 | 国产三级精品三级男人的天堂 | 国产乱人伦av在线无码 | 一本久久a久久精品亚洲 | 日本熟妇大屁股人妻 | 波多野结衣乳巨码无在线观看 | 国产一区二区三区影院 | 欧美变态另类xxxx | 色偷偷人人澡人人爽人人模 | 色婷婷综合激情综在线播放 | 久久久久久国产精品无码下载 | 国产亚洲精品久久久久久国模美 | 清纯唯美经典一区二区 | 秋霞成人午夜鲁丝一区二区三区 | 天堂亚洲2017在线观看 | 日本精品少妇一区二区三区 | 亚洲中文字幕va福利 | 免费人成网站视频在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 三级4级全黄60分钟 | 熟妇人妻无乱码中文字幕 | 无码人妻久久一区二区三区不卡 | 国产人妻大战黑人第1集 | 欧美自拍另类欧美综合图片区 | 精品无码一区二区三区爱欲 | 精品熟女少妇av免费观看 | 131美女爱做视频 | 国产三级久久久精品麻豆三级 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美野外疯狂做受xxxx高潮 | 香港三级日本三级妇三级 | 亚洲第一网站男人都懂 | 国产成人无码区免费内射一片色欲 | 日韩亚洲欧美精品综合 | 奇米影视7777久久精品人人爽 | 日本欧美一区二区三区乱码 | 成人毛片一区二区 | 中文无码伦av中文字幕 | 97久久超碰中文字幕 | 人妻人人添人妻人人爱 | 人妻无码αv中文字幕久久琪琪布 | 亚洲国产精品无码一区二区三区 | 国产综合久久久久鬼色 | 亚洲阿v天堂在线 | 少妇久久久久久人妻无码 | 中文字幕人成乱码熟女app | 亚洲色欲久久久综合网东京热 | 永久免费观看美女裸体的网站 | 久久五月精品中文字幕 | 精品国产一区二区三区四区在线看 | 中文字幕乱码亚洲无线三区 | 亚洲成av人综合在线观看 | 欧美丰满老熟妇xxxxx性 | 亚洲国产一区二区三区在线观看 | 无码人妻黑人中文字幕 | 国产97色在线 | 免 | 国产激情无码一区二区app | 国产片av国语在线观看 | 精品无码国产一区二区三区av | 无码人妻精品一区二区三区下载 | 国产99久久精品一区二区 | 狠狠噜狠狠狠狠丁香五月 | 国产麻豆精品一区二区三区v视界 | 国内少妇偷人精品视频免费 | 福利一区二区三区视频在线观看 | 人妻aⅴ无码一区二区三区 | 久久久中文久久久无码 | 国产av人人夜夜澡人人爽麻豆 | 内射爽无广熟女亚洲 | 久久99精品久久久久婷婷 | 久激情内射婷内射蜜桃人妖 | 国产亚洲精品久久久久久国模美 | 动漫av网站免费观看 | 国产精品无码一区二区三区不卡 | 大肉大捧一进一出好爽视频 | 久久精品视频在线看15 | 我要看www免费看插插视频 | 永久黄网站色视频免费直播 | 给我免费的视频在线观看 | 丝袜人妻一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 免费无码肉片在线观看 | 色婷婷久久一区二区三区麻豆 | 丝袜人妻一区二区三区 | 伊人久久大香线蕉av一区二区 | a在线亚洲男人的天堂 | 999久久久国产精品消防器材 | 九九在线中文字幕无码 | 久久久久久av无码免费看大片 | 国产精品久久久 | 国产真人无遮挡作爱免费视频 | 国产精品第一国产精品 | 网友自拍区视频精品 | 亚洲国产精品成人久久蜜臀 | 国产成人精品视频ⅴa片软件竹菊 | 国产午夜福利亚洲第一 | 清纯唯美经典一区二区 | 亚洲乱码日产精品bd | 亚洲熟熟妇xxxx | 国产熟女一区二区三区四区五区 | 99久久久无码国产精品免费 | 久久aⅴ免费观看 | 久久亚洲精品中文字幕无男同 | 无码人妻丰满熟妇区五十路百度 | 国产亚洲日韩欧美另类第八页 | 日本大乳高潮视频在线观看 | 国产精品成人av在线观看 | 亚洲精品国偷拍自产在线麻豆 | 秋霞特色aa大片 | 中文字幕av无码一区二区三区电影 | 一区二区三区高清视频一 | 日韩精品无码一区二区中文字幕 | 亚洲第一网站男人都懂 | 俺去俺来也www色官网 |