青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-9  評論-6  文章-0  trackbacks-0

6、 使用ADO

6.1 概述

ADO是ActiveX數(shù)據(jù)對象(ActiveX Data Object),這是Microsoft開發(fā)數(shù)據(jù)庫應用程序的面向對象的新接口。ADO訪問數(shù)據(jù)庫是通過訪問OLE DB數(shù)據(jù)提供程序來進行的,提供了一種對OLE DB數(shù)據(jù)提供程序的簡單高層訪問接口。

ADO技術簡化了OLE DB的操作,OLE DB的程序中使用了大量的COM接口,而ADO封裝了這些接口。所以,ADO是一種高層的訪問技術。

ADO技術基于通用對象模型(COM),它提供了多種語言的訪問技術,同時,由于ADO提供了訪問自動化接口,所以,ADO可以用描述的腳本語言來訪問VBScript,VCScript等。 

6.2 在VC中使用ADO

可以使用VC6提供的ActiveX控件開發(fā)應用程序,還可以用ADO對象開發(fā)應用程序。使用ADO對象開發(fā)應用程序可以使程序開發(fā)者更容易地控制對數(shù)據(jù)庫的訪問,從而產(chǎn)生符合用戶需求的數(shù)據(jù)庫訪問程序。

使用ADO對象開發(fā)應用程序也類似其它技術,需產(chǎn)生與數(shù)據(jù)源的連接,創(chuàng)建記錄等步驟,但與其它訪問技術不同的是,ADO技術對對象之間的層次和順序關系要求不是太嚴格。在程序開發(fā)過程中,不必選建立連接,然后才能產(chǎn)生記錄對象等。可以在使用記錄的地方直接使用記錄對象,在創(chuàng)建記錄對象的同時,程序自動建立了與數(shù)據(jù)源的連接。這種模型有力的簡化了程序設計,增強了程序的靈活性。下面講述使用ADO對象進行程序設計的方法。

6.21 引入ADO庫文件

使用ADO前必須在工程的stdafx.h文件里用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:

#define INITGUID

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")

#include "icrsint.h"

這行語句聲明在工程中使用ADO,但不使用ADO的名字空間,并且為了避免沖突,將EOF改名為EndOfFile。

6.22 初始化ADO環(huán)境

在使用ADO對象之前必須先初始化COM環(huán)境。初始化COM環(huán)境可以用以下代碼完成:

::CoInitialize(NULL);

在初始化COM環(huán)境后,就可以使用ADO對象了,如果在程序前面沒有添加此代碼,將會產(chǎn)生COM錯誤。

在使用完ADO對象后,需要用以下的代碼將初始化的對象釋放:

::CoUninitialize();

此函數(shù)清除了為ADO對象準備的COM環(huán)境。

6.23 接口簡介

ADO庫包含三個基本接口:

__ConnectionPtr接口、

__CommandPtr接口、

__RecordsetPtr接口, 

__ConnectionPtr接口返回一個記錄集或一個空指針。通常使用它來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結果的SQL語句,如一個存儲過程。用__ConnectionPtr接口返回一個記錄集不是一個好的使用方法。通常同CDatabase一樣,使用它創(chuàng)建一個數(shù)據(jù)連接,然后使用其它對象執(zhí)行數(shù)據(jù)輸入輸出操作。 

__CommandPtr接口返回一個記錄集。它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用__CommandPtr接口時,可以利用全局__ConnectionPtr接口,也可以在__CommandPtr接口里直接使用連接串。如果只執(zhí)行一次或幾次數(shù)據(jù)訪問操作,后者是比較好的選擇。但如果要頻繁訪問數(shù)據(jù)庫,并要返回很多記錄集,那么,應該使用全局__ConnectionPtr接口創(chuàng)建一個數(shù)據(jù)連接,然后使用__CommandPtr接口執(zhí)行存儲過程和SQL語句。 

__RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。同__CommandPtr接口一樣,它不一定要使用一個已經(jīng)創(chuàng)建的數(shù)據(jù)連接,可以用一個連接串代替連接指針賦給__RecordsetPtr的connection成員變量,讓它自己創(chuàng)建數(shù)據(jù)連接。如果要使用多個記錄集,最好的方法是同Command對象一樣使用已經(jīng)創(chuàng)建了數(shù)據(jù)連接的全局—ConnectionPtr接口,然后使用__Recordse7tPtr執(zhí)行存儲過程和SQL語句。

6、24 使用ADO訪問數(shù)據(jù)庫

__ConnectionPtr是一個連接接口,首先創(chuàng)建一個__ConnectionPtr接口實例,接著指向并打開一個ODBC數(shù)據(jù)源或OLE DB數(shù)據(jù)提供者(Provider)。以下代碼分別創(chuàng)建一個基于DSN和非DSN的數(shù)據(jù)連接。

  //使用__ConnectionPtr(基于DSN)

  __ConnectionPtr MyDb;

  MyDb.CreateInstance(__uuidof(Connection));

  MyDb-〉Open("DSN=samp;UID=admin;PWD=admin","","",-1);

  //使用—ConnectionPtr (基于非DSN)

  __ConnectionPtr MyDb;

  MyDb.CreateInstance(__uuidof(Connection));

MyDb.Open("Provider=SQLOLEDB;SERVER=server;DATABASE=samp;UID=admin;PWD=admin","","",-1);

//使用__RecordsetPtr執(zhí)行SQL語句

  __RecordsetPtr MySet;

  MySet.CreateInstance(__uuidof(Recordset));

MySet-〉Open("SELECT * FROM some__table",  MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

現(xiàn)在我們已經(jīng)有了一個數(shù)據(jù)連接和一個記錄集,接下來就可以使用數(shù)據(jù)了。從以下代碼可以看到,使用ADO的__RecordsetPtr接口,就不需要像DAO那樣頻繁地使用大而復雜的數(shù)據(jù)結構VARIANT,并強制轉換各種數(shù)據(jù)類型了,這也是ADO的優(yōu)點之一。假定程序有一個名稱為m__List的ListBox控件,下面代碼我們用__RecordsetPtr接口獲取記錄集數(shù)據(jù)并填充這個ListBox控件:

__variant__t Holder

  try{while(!MySet-〉adoEOF)

  { Holder = MySet-〉GetCollect("FIELD__1");

  if(Holder.vt!=VT__NULL)

  m__List.AddString((char)__bstr__t(Holder));

  MySet-〉MoveNext();} }

  catch(__com__error  e)

  { CString Error = e-〉ErrorMessage();

   AfxMessageBox(e-〉ErrorMessage());

  } catch(...)

  { MessageBox("ADO發(fā)生錯誤!");} 

必須始終在代碼中用try和catch來捕獲ADO錯誤,否則ADO錯誤會使你的應用程序崩潰。當ADO發(fā)生運行錯誤時(如數(shù)據(jù)庫不存在),OLE DB數(shù)據(jù)提供者將自動創(chuàng)建一個__com__error對象,并將有關錯誤信息填充到這個對象的成員變量。 

6.25 類型轉換

由于COM對象是跨平臺的,它使用了一種通用的方法來處理各種類型的數(shù)據(jù),因此CString 類和COM對象是不兼容的,我們需要一組API來轉換COM對象和C++類型的數(shù)據(jù)。__vatiant__t和__bstr__t就是這樣兩種對象。它們提供了通用的方法轉換COM對象和C++類型的數(shù)據(jù)。

6.3 在VB中使用ADO

ADO 提供執(zhí)行以下操作的方式:

1、連接到數(shù)據(jù)源。同時,可確定對數(shù)據(jù)源的所有更改是否已成功或沒有發(fā)生。

2、指定訪問數(shù)據(jù)源的命令,同時可帶變量參數(shù),或優(yōu)化執(zhí)行。

3、執(zhí)行命令。

3、如果這個命令使數(shù)據(jù)按表中的行的形式返回,則將這些行存儲在易于檢查、操作或更改的緩存中。

4、適當情況下,可使用緩存行的更改內容來更新數(shù)據(jù)源。

5、提供常規(guī)方法檢測錯誤(通常由建立連接或執(zhí)行命令造成)。

在典型情況下,需要在編程模型中采用所有這些步驟。但是,由于 ADO 有很強的靈活性,所以最后只需執(zhí)行部分模塊就能做一些有用的工作。 

以下元素是 ADO 編程模型中的關鍵部分:

6.31 連接

通過“連接”可從應用程序訪問數(shù)據(jù)源,連接是交換數(shù)據(jù)所必需的環(huán)境。對象模型使用 Connection 對象使連接概念得以具體化。

“事務”用于界定在連接過程中發(fā)生的一系列數(shù)據(jù)訪問操作的開始和結束。ADO 可明確事務中的操作造成的對數(shù)據(jù)源的更改或者成功發(fā)生,或者根本沒有發(fā)生。如果取消事務或它的一個操作失敗,則最終的結果將仿佛是事務中的操作均未發(fā)生,數(shù)據(jù)源將會保持事務開始以前的狀態(tài)。對象模型無法清楚地體現(xiàn)出事務的概念,而是用一組 Connection 對象方法來表示。ADO 從 OLE DB 提供者訪問數(shù)據(jù)和服務。Connection 對象用于指定專門的提供者和任意參數(shù)。

6.32 命令

通過已建立的連接發(fā)出的“命令”可以某種方式來操作數(shù)據(jù)源。一般情況下,命令可以在數(shù)據(jù)源中添加、刪除或更新數(shù)據(jù),或者在表中以行的格式檢索數(shù)據(jù)。對象模型用 Command 對象來體現(xiàn)命令概念。使用 Command 對象可使 ADO 優(yōu)化命令的執(zhí)行。

  1. 參數(shù)

     

通常,命令需要的變量部分即“參數(shù)”可以在命令發(fā)布之前進行更改。例如,可重復發(fā)出相同的數(shù)據(jù)檢索命令,但每一次均可更改指定的檢索信息。

參數(shù)對與函數(shù)活動相同的可執(zhí)行命令非常有用,這樣就可知道命令是做什么的,但不必知道它如何工作。例如,可發(fā)出一項銀行過戶命令,從一方借出貸給另一方。可將要過戶的款額設置為參數(shù)。

對象模型用 Parameter 對象來體現(xiàn)參數(shù)概念。

6.33 記錄集

如果命令是在表中按信息行返回數(shù)據(jù)的查詢(行返回查詢),則這些行將會存儲在本地。

對象模型將該存儲體現(xiàn)為 Recordset 對象。但是,不存在僅代表單獨一個 Recordset 行的對象。

記錄集是在行中檢查和修改數(shù)據(jù)最主要的方法。

6.34 字段

一個記錄集行包含一個或多個“字段”。如果將記錄集看作二維網(wǎng)格,字段將排列構成“列”。每一字段(列)都分別包含有名稱、數(shù)據(jù)類型和值的屬性,正是在該值中包含了來自數(shù)據(jù)源的真實數(shù)據(jù)。

對象模型以 Field 對象體現(xiàn)字段。

要修改數(shù)據(jù)源中的數(shù)據(jù),可在記錄集行中修改 Field 對象的值,對記錄集的更改最終被傳送給數(shù)據(jù)源。作為選項,Connection 對象的事務管理方法能夠可靠地保證更改要么全部成功,要么全部失敗。

6.35 錯誤

錯誤隨時可在應用程序中發(fā)生,通常是由于無法建立連接、執(zhí)行命令或對某些狀態(tài)(例如,試圖使用沒有初始化的記錄集)的對象進行操作。

對象模型以 Error 對象體現(xiàn)錯誤。

任意給定的錯誤都會產(chǎn)生一個或多個 Error 對象,隨后產(chǎn)生的錯誤將會放棄先前的 Error 對象組。

6.36 屬性

每個 ADO 對象都有一組唯一的“屬性”來描述或控制對象的行為。

屬性有內置和動態(tài)兩種類型。內置屬性是 ADO 對象的一部分并且隨時可用。動態(tài)屬性則由特別的數(shù)據(jù)提供者添加到 ADO 對象的屬性集合中,僅在提供者被使用時才能存在。

對象模型以 Property 對象體現(xiàn)屬性。

6.37 集合

ADO 提供“集合”,這是一種可方便地包含其他特殊類型對象的對象類型。使用集合方法可按名稱(文本字符串)或序號(整型數(shù))對集合中的對象進行檢索。

ADO 提供四種類型的集合:

Connection 對象具有 Errors 集合,包含為響應與數(shù)據(jù)源有關的單一錯誤而創(chuàng)建的所有 Error 對象。

Command 對象具有 Parameters 集合,包含應用于 Command 對象的所有 Parameter 對象。

Recordset 對象具有 Fields 集合,包含所有定義 Recordset 對象列的 Field 對象。

此外,Connection、Command、Recordset 和 Field 對象都具有 Properties 集合。它包含所有屬于各個包含對象的 Property 對象。

ADO 對象擁有可在其上使用的諸如“整型”、“字符型”或“布爾型”這樣的普通數(shù)據(jù)類型來設置或檢索值的屬性。然而,有必要將某些屬性看成是數(shù)據(jù)類型“COLLECTION OBJECT”的返回值。相應的,集合對象具有存儲和檢索適合該集合的其他對象的方法。

6.38 事件

ADO 2.0 支持事件,事件是對某些操作將要或已經(jīng)發(fā)生的通知。

有兩類事件:ConnectionEvent 和 RecordsetEvent。Connection 對象產(chǎn)生 ConnectionEvent 事件,而 Recordset 對象則產(chǎn)生 RecordsetEvent 事件。

事件由事件處理程序例程處理,該例程在某個操作開始之前或結束之后被調用。

某些事件是成對出現(xiàn)的。開始操作前調用的事件名格式為 WillEvent(Will 事件),而操作結束后調用的事件名格式為 EventComplete(Complete 事件)。其余的不成對事件只在操作結束后發(fā)生。(其名稱沒有任何固定模式。)事件處理程序由狀態(tài)參數(shù)控制。附加信息由錯誤和對象參數(shù)提供。

可以請求事件處理程序不接受第一次通知以后的任何通知。例如,可以選擇只接收 Will 事件或 Complete 事件。

下面的代碼顯示了一個使用ADO的例子。

首先加入Microsoft ActiveX Data Object 2.0 Library引用。

Dim db As Connection

Set db = New Connection

db.CursorLocation = adUseClient

db.Open "PROVIDER=MSDASQL;DSN=TestDatabase", "sa", "", -1

Dim i As Long

Dim id As Long

Dim value As Single

Dim rst As New Recordset

Set rst = New Recordset

rst.Open "select * from 模擬量變化歷史表", db, adOpenDynamic, adLockOptimistic

rst.MoveFirst

For i = 0 To rst.RecordCount - 1

id = rst.Fields("ID")

value=rst.Fields(“VALUE”)

rst.MoveNext

Next i

rst.Close

Set rst = Nothing

db.Close

6.4總結

ADO技術是訪問數(shù)據(jù)庫的新技術,具有易于使用、訪問靈活、應用廣泛的特點。用ADO訪問數(shù)據(jù)源的特點可總結如下:

  1. 易于使用

     

    這是ADO技術的最重要的一個特征。由于ADO是高層應用,所以相對于OLE DB或者ODBC來說,它具有面向對象的特性。同時,在ADO的對象結構中,其對象之間的層次關系并不明顯。相對于DAO等訪問技術來講,又不必關心對象的構造順序和構造層次。對于要用的對象,不必選建立連接、會話等對象,只需直接構造即可,方便了應用程序的編制。

     

  2. 高速訪問數(shù)據(jù)源

     

    由于ADO技術基于OLE DB,所以,它也繼承了OLE DB訪問數(shù)據(jù)庫的高速性。

     

  3. 可以訪問不同數(shù)據(jù)源

     

    ADO技術可以訪問包括關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫的所有文件系統(tǒng)。此特點使應用程序有很多的靈活性和通用性。

     

  4. 可以用于Microsoft ActiveX頁

     

    ADO技術可以以ActiveX控件的形式出現(xiàn),所以,可以被用于Microsoft ActiveX頁,此特征可簡化WEB頁的編程。

     

  5. 程序占用內存少

     

由于ADO是基于組件對象模型(COM)的訪問技術,所以,用ADO產(chǎn)生的應用程序占用內存少。

7、總結

要在訪問數(shù)據(jù)時判斷出應該使用哪一種技術,這并不容易。可能需要公用實用程序來處理多個數(shù)據(jù)庫類型;部分數(shù)據(jù)可能出現(xiàn)在本地硬盤驅動器上,部分在網(wǎng)絡上,還有一部分在主機上。甚至客戶安裝在設備上的產(chǎn)品也會使這種選擇更加困難。例如,你所期待的ODBC支持級別也許依賴于所安裝的Microsoft Office的版本,因為這個產(chǎn)品不提供ODBC支持。你還會發(fā)現(xiàn),ADO類提供的對象和方法要比ODBC類多。ADO可以提供程序中絕對必須具有的一些特性棗例如,你會發(fā)現(xiàn)OLE-DB和ADO兩者都支持DFX_Currency,但在ODBC中沒有對應的功能,但你要想掌握它們也必須付出一定的努力。

選擇OLE-DB或ODBC時,有幾條一般的規(guī)則。因為ADO實際上只是OLE-DB的包裝,所以這些規(guī)則也適用于它。下面提供一些基本的原則,可以用來幫助你決定選擇OLE-DB還是ODBC。

非OLE環(huán)境 如果要訪問支持ODBC的數(shù)據(jù)庫,而該數(shù)據(jù)庫又在不支持OLE的服務器上,那么ODBC是最好的選擇。

非SQL環(huán)境 ODBC在處理SQL時非常出眾。處理非SQL數(shù)據(jù)庫時,OLE-DB則具有非常明顯的優(yōu)勢。

OLE環(huán)境 對支持OLE的服務器來說,選擇OLE-DB還是ODBC也許是希望各半。如果有ODBC驅動程序可供利用,那么使用ODBC是一個好主意;否則,就只有選擇OLE-DB了。

所需的互操作性 如果需要可互操作的數(shù)據(jù)庫部件,那么只有選擇OLE-DB。

posted on 2006-05-29 08:48 小石頭 閱讀(4187) 評論(6)  編輯 收藏 引用

評論:
# re: C++操作數(shù)據(jù)庫 2008-04-09 22:07 | Jc
兩個字
非常好  回復  更多評論
  
# re: C++操作數(shù)據(jù)庫 2008-04-10 09:24 | 小石頭
@Jc
呵呵,我也是抄來的..  回復  更多評論
  
# re: C++操作數(shù)據(jù)庫 2009-04-02 15:59 | ly
謝謝分享  回復  更多評論
  
# re: C++操作數(shù)據(jù)庫[未登錄] 2009-11-25 00:01 | robin
怎么后面又變VB了?  回復  更多評論
  
# re: C++操作數(shù)據(jù)庫[未登錄] 2012-05-10 09:18 | 123
還沒試試,不過謝謝了  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩亚洲成人| 一区二区三区欧美在线| 亚洲日本乱码在线观看| 在线精品高清中文字幕| 伊人成人网在线看| 亚洲国产精品久久久久秋霞蜜臀| 樱花yy私人影院亚洲| 亚洲精品国产精品久久清纯直播| 日韩午夜激情av| 午夜精品久久一牛影视| 久久久亚洲精品一区二区三区 | 一区二区三区国产精品| 亚洲网站在线看| 久久精品国产免费观看| 欧美成人第一页| 国产精品久久久久久久久久免费看| 国产午夜精品久久久久久免费视| 亚洲第一福利社区| 亚洲影院在线观看| 欧美激情bt| 亚洲欧美综合网| 欧美精品日日鲁夜夜添| 国产欧美日韩精品专区| 日韩午夜三级在线| 久久精品综合一区| 亚洲精品中文字幕女同| 久久精品亚洲精品| 国产精品一区二区久久精品| 亚洲精品欧美极品| 美女网站久久| 欧美一区二区三区久久精品茉莉花| 每日更新成人在线视频| 国产日韩在线看片| 亚洲尤物在线视频观看| 亚洲国产婷婷香蕉久久久久久| 一区二区三区成人精品| 免费观看亚洲视频大全| 国产一区二区久久精品| 午夜精品一区二区三区在线播放| 亚洲国产精品黑人久久久| 久久久久久久综合狠狠综合| 国产农村妇女精品一二区| 国产精品99久久久久久白浆小说| 你懂的国产精品永久在线| 亚洲欧美在线看| 国产精品老牛| 亚洲欧美日本伦理| 夜夜嗨av一区二区三区| 欧美色中文字幕| 一区二区三区久久| 亚洲精品一区在线观看| 免费观看日韩av| 亚洲激情综合| 亚洲第一黄色网| 免费观看不卡av| 在线观看成人网| 老司机精品视频一区二区三区| 久久精品99无色码中文字幕 | 亚洲精品美女91| 久久综合九色九九| 亚洲第一区在线| 欧美国产在线视频| 欧美成人tv| 一本色道久久综合狠狠躁篇的优点 | 欧美区一区二| 欧美精品v国产精品v日韩精品| 久久激情视频久久| 亚洲小视频在线观看| 国产精品久久国产三级国电话系列 | 国产日韩欧美在线播放不卡| 久久精品人人做人人综合| 欧美淫片网站| 亚洲国产精品久久久久秋霞影院 | 亚洲一区二区三区高清不卡| 一区二区三区国产| 国产婷婷色一区二区三区在线 | 一区二区三欧美| 国产精品视频yy9299一区| 久久精品在线播放| 欧美va日韩va| 亚洲一区二区三区中文字幕 | 欧美在线视频导航| 亚洲第一视频| 亚洲另类黄色| 国产亚洲综合精品| 亚洲国产精品久久久久婷婷884 | 亚洲在线视频观看| 久久福利精品| 亚洲伦理一区| 久久久天天操| 欧美大胆成人| 欧美影院成年免费版| 老色批av在线精品| 亚洲一区二区在线免费观看| 欧美伊久线香蕉线新在线| 亚洲伦理中文字幕| 久久av资源网| 正在播放亚洲| 久久青青草原一区二区| 亚洲一区二区在线观看视频| 久久精品国产77777蜜臀| 亚洲精品一区二区三区樱花 | 久久精品在线播放| 欧美日韩精品免费| 麻豆91精品| 国产精品夜夜嗨| 亚洲精品五月天| 91久久精品国产91久久性色tv| 欧美一区二区三区四区夜夜大片| 麻豆成人小视频| 亚洲男女毛片无遮挡| 久久天天综合| 欧美一区二区三区精品电影| 欧美激情精品久久久久| 久久婷婷影院| 国产精品日韩| 亚洲毛片av| 亚洲伦理中文字幕| 久热精品在线视频| 久久久一区二区| 国产嫩草影院久久久久| 中文精品视频| 亚洲一区二区三区国产| 欧美巨乳在线| 亚洲日本中文字幕| 亚洲欧洲精品一区二区| 久久综合久久久久88| 美女爽到呻吟久久久久| 在线观看欧美成人| 老色鬼精品视频在线观看播放| 久热精品视频在线观看| 好吊视频一区二区三区四区| 欧美诱惑福利视频| 久久久久免费观看| 精品88久久久久88久久久| 久久精品2019中文字幕| 久久综合狠狠综合久久综青草| 国产一区二区三区免费不卡| 欧美在线一区二区三区| 另类欧美日韩国产在线| 亚洲黄页一区| 欧美女人交a| 中文欧美日韩| 久久国产精品电影| 在线视频观看日韩| 欧美大片免费| 亚洲午夜国产成人av电影男同| 性色一区二区| 韩国成人福利片在线播放| 久久久999成人| 亚洲福利国产精品| 中文日韩电影网站| 国产目拍亚洲精品99久久精品| 欧美专区在线观看| 欧美激情视频在线播放| 一区二区三区回区在观看免费视频| 欧美亚洲第一区| 久久精品国产91精品亚洲| 亚洲丰满少妇videoshd| 亚洲制服丝袜在线| 永久域名在线精品| 欧美日韩精品一区二区在线播放 | 久久久亚洲欧洲日产国码αv| 在线精品福利| 国产精品豆花视频| 久久精品一区中文字幕| 亚洲国产精品欧美一二99| 亚洲在线观看视频| 韩国精品主播一区二区在线观看| 噜噜噜91成人网| 在线视频中文亚洲| 麻豆精品在线播放| 亚洲一区精品视频| 亚洲国产福利在线| 国产欧美日韩视频在线观看| 欧美成人资源网| 欧美在线观看你懂的| 欧美日韩www| 老司机凹凸av亚洲导航| 99视频一区二区| 狠狠久久婷婷| 国产精品看片资源| 欧美二区在线看| 欧美在线一级视频| 99riav1国产精品视频| 欧美成人亚洲成人| 久久成人精品电影| 亚洲一级黄色| 亚洲毛片在线看| 影音欧美亚洲| 国产亚洲精品福利| 国产精品亚洲综合| 欧美午夜片在线免费观看| 欧美a级大片| 久久先锋资源| 欧美在线视频一区| 香蕉亚洲视频| 亚洲欧美日韩精品久久久| 亚洲视屏在线播放| 日韩视频在线观看|