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

隨筆-9  評(píng)論-6  文章-0  trackbacks-0

6、 使用ADO

6.1 概述

ADO是ActiveX數(shù)據(jù)對(duì)象(ActiveX Data Object),這是Microsoft開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的面向?qū)ο蟮男陆涌凇DO訪問(wèn)數(shù)據(jù)庫(kù)是通過(guò)訪問(wèn)OLE DB數(shù)據(jù)提供程序來(lái)進(jìn)行的,提供了一種對(duì)OLE DB數(shù)據(jù)提供程序的簡(jiǎn)單高層訪問(wèn)接口。

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

ADO技術(shù)基于通用對(duì)象模型(COM),它提供了多種語(yǔ)言的訪問(wèn)技術(shù),同時(shí),由于ADO提供了訪問(wèn)自動(dòng)化接口,所以,ADO可以用描述的腳本語(yǔ)言來(lái)訪問(wèn)VBScript,VCScript等。 

6.2 在VC中使用ADO

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

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

6.21 引入ADO庫(kù)文件

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

#define INITGUID

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

#include "icrsint.h"

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

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

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

::CoInitialize(NULL);

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

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

::CoUninitialize();

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

6.23 接口簡(jiǎn)介

ADO庫(kù)包含三個(gè)基本接口:

__ConnectionPtr接口、

__CommandPtr接口、

__RecordsetPtr接口, 

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

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

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

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

__ConnectionPtr是一個(gè)連接接口,首先創(chuàng)建一個(gè)__ConnectionPtr接口實(shí)例,接著指向并打開(kāi)一個(gè)ODBC數(shù)據(jù)源或OLE DB數(shù)據(jù)提供者(Provider)。以下代碼分別創(chuàng)建一個(gè)基于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語(yǔ)句

  __RecordsetPtr MySet;

  MySet.CreateInstance(__uuidof(Recordset));

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

現(xiàn)在我們已經(jīng)有了一個(gè)數(shù)據(jù)連接和一個(gè)記錄集,接下來(lái)就可以使用數(shù)據(jù)了。從以下代碼可以看到,使用ADO的__RecordsetPtr接口,就不需要像DAO那樣頻繁地使用大而復(fù)雜的數(shù)據(jù)結(jié)構(gòu)VARIANT,并強(qiáng)制轉(zhuǎn)換各種數(shù)據(jù)類(lèi)型了,這也是ADO的優(yōu)點(diǎn)之一。假定程序有一個(gè)名稱(chēng)為m__List的ListBox控件,下面代碼我們用__RecordsetPtr接口獲取記錄集數(shù)據(jù)并填充這個(gè)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ā)生錯(cuò)誤!");} 

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

6.25 類(lèi)型轉(zhuǎn)換

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

6.3 在VB中使用ADO

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

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

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

3、執(zhí)行命令。

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

4、適當(dāng)情況下,可使用緩存行的更改內(nèi)容來(lái)更新數(shù)據(jù)源。

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

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

以下元素是 ADO 編程模型中的關(guān)鍵部分:

6.31 連接

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

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

6.32 命令

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

  1. 參數(shù)

     

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

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

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

6.33 記錄集

如果命令是在表中按信息行返回?cái)?shù)據(jù)的查詢(xún)(行返回查詢(xún)),則這些行將會(huì)存儲(chǔ)在本地。

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

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

6.34 字段

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

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

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

6.35 錯(cuò)誤

錯(cuò)誤隨時(shí)可在應(yīng)用程序中發(fā)生,通常是由于無(wú)法建立連接、執(zhí)行命令或?qū)δ承顟B(tài)(例如,試圖使用沒(méi)有初始化的記錄集)的對(duì)象進(jìn)行操作。

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

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

6.36 屬性

每個(gè) ADO 對(duì)象都有一組唯一的“屬性”來(lái)描述或控制對(duì)象的行為。

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

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

6.37 集合

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

ADO 提供四種類(lèi)型的集合:

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

Command 對(duì)象具有 Parameters 集合,包含應(yīng)用于 Command 對(duì)象的所有 Parameter 對(duì)象。

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

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

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

6.38 事件

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

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

事件由事件處理程序例程處理,該例程在某個(gè)操作開(kāi)始之前或結(jié)束之后被調(diào)用。

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

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

下面的代碼顯示了一個(gè)使用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總結(jié)

ADO技術(shù)是訪問(wèn)數(shù)據(jù)庫(kù)的新技術(shù),具有易于使用、訪問(wèn)靈活、應(yīng)用廣泛的特點(diǎn)。用ADO訪問(wèn)數(shù)據(jù)源的特點(diǎn)可總結(jié)如下:

  1. 易于使用

     

    這是ADO技術(shù)的最重要的一個(gè)特征。由于ADO是高層應(yīng)用,所以相對(duì)于OLE DB或者ODBC來(lái)說(shuō),它具有面向?qū)ο蟮奶匦浴M瑫r(shí),在ADO的對(duì)象結(jié)構(gòu)中,其對(duì)象之間的層次關(guān)系并不明顯。相對(duì)于DAO等訪問(wèn)技術(shù)來(lái)講,又不必關(guān)心對(duì)象的構(gòu)造順序和構(gòu)造層次。對(duì)于要用的對(duì)象,不必選建立連接、會(huì)話(huà)等對(duì)象,只需直接構(gòu)造即可,方便了應(yīng)用程序的編制。

     

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

     

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

     

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

     

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

     

  4. 可以用于Microsoft ActiveX頁(yè)

     

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

     

  5. 程序占用內(nèi)存少

     

由于ADO是基于組件對(duì)象模型(COM)的訪問(wèn)技術(shù),所以,用ADO產(chǎn)生的應(yīng)用程序占用內(nèi)存少。

7、總結(jié)

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

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

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

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

OLE環(huán)境 對(duì)支持OLE的服務(wù)器來(lái)說(shuō),選擇OLE-DB還是ODBC也許是希望各半。如果有ODBC驅(qū)動(dòng)程序可供利用,那么使用ODBC是一個(gè)好主意;否則,就只有選擇OLE-DB了。

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

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

評(píng)論:
# re: C++操作數(shù)據(jù)庫(kù) 2008-04-09 22:07 | Jc
兩個(gè)字
非常好  回復(fù)  更多評(píng)論
  
# re: C++操作數(shù)據(jù)庫(kù) 2008-04-10 09:24 | 小石頭
@Jc
呵呵,我也是抄來(lái)的..  回復(fù)  更多評(píng)論
  
# re: C++操作數(shù)據(jù)庫(kù) 2009-04-02 15:59 | ly
謝謝分享  回復(fù)  更多評(píng)論
  
# re: C++操作數(shù)據(jù)庫(kù)[未登錄](méi) 2009-11-25 00:01 | robin
怎么后面又變VB了?  回復(fù)  更多評(píng)論
  
# re: C++操作數(shù)據(jù)庫(kù)[未登錄](méi) 2012-05-10 09:18 | 123
還沒(méi)試試,不過(guò)謝謝了  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合五月| 久久久久久久久久久成人| 最新中文字幕亚洲| 99精品视频一区二区三区| 亚洲人成在线观看| 亚洲综合日韩中文字幕v在线| 国内精品久久久久久久影视蜜臀 | 久久久久久一区| 亚洲欧美视频一区二区三区| 国产性色一区二区| 久久久五月婷婷| 欧美成人伊人久久综合网| 91久久精品www人人做人人爽| 亚洲国产日韩一区| 欧美日韩伊人| 欧美.com| 欧美私人网站| 欧美福利一区二区| 国产精品久久久久9999| 国产午夜精品一区二区三区视频 | 亚洲国产91精品在线观看| 久久久久久一区二区三区| 在线观看亚洲a| 亚洲一区不卡| 亚洲精品久久久久久久久久久久| 中文网丁香综合网| 在线观看日韩精品| 一区二区欧美在线| 99re6这里只有精品视频在线观看| 亚洲视频福利| 亚洲免费一级电影| 欧美伦理91i| 亚洲日本va午夜在线电影| 国产美女精品视频| 夜夜狂射影院欧美极品| 99在线|亚洲一区二区| 欧美大片在线看| 国产午夜精品美女毛片视频| 亚洲视频精品在线| 午夜精品免费在线| 欧美视频一区二区在线观看 | 国产免费观看久久| 亚洲精品1234| 亚洲午夜久久久久久久久电影院 | 在线不卡a资源高清| 亚洲综合电影| 久久久久免费观看| 亚洲精品国产视频| 欧美一区二区三区在线看| 国产一区二区三区视频在线观看 | 毛片精品免费在线观看| 久久狠狠亚洲综合| 国产午夜久久久久| 午夜欧美大尺度福利影院在线看| 欧美在线视频网站| 在线精品国精品国产尤物884a| 性xx色xx综合久久久xx| 欧美国产精品va在线观看| 日韩视频免费| 国产一区二区三区在线观看视频| 蜜桃久久av一区| 亚洲一区二区三区四区五区黄| 久久久久久久一区| 欧美福利网址| 欧美破处大片在线视频| 亚洲一区二区三区涩| 欧美国产精品va在线观看| 欧美一区二视频| 在线一区日本视频| 亚洲国产黄色| 好吊妞这里只有精品| 国产精品99一区| 欧美日韩亚洲一区二区三区| 久久一区中文字幕| 欧美影院在线播放| 性色av一区二区三区红粉影视| 亚洲国产精品久久久久秋霞不卡| 小黄鸭精品密入口导航| 日韩一区二区久久| 一区二区日韩| 一区二区三区日韩| 9色国产精品| 亚洲视频免费看| 亚洲一区二区三区777| 一本色道**综合亚洲精品蜜桃冫| 亚洲精品乱码久久久久久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲一区二区三区在线| 亚洲自拍16p| 一本久道久久综合中文字幕| 国产自产女人91一区在线观看| 欧美日韩在线精品| 国产精品看片资源| 国产日韩欧美自拍| 国语自产精品视频在线看抢先版结局 | 久久精品中文字幕免费mv| 亚洲欧美日韩久久精品| 久久黄金**| 亚洲国产成人91精品| 红桃视频一区| 亚洲黄色av| 欧美一区二区三区四区在线观看地址| 日韩一级欧洲| 久久精品综合一区| 亚洲日韩视频| 美玉足脚交一区二区三区图片| 麻豆免费精品视频| 宅男在线国产精品| 久久天天狠狠| 国产精品一区二区视频| 国产一区二区三区黄视频| 一本色道精品久久一区二区三区| 久久久欧美一区二区| 亚洲视频欧美视频| 欧美chengren| 亚洲高清在线观看一区| 午夜精品短视频| 一区二区国产日产| 欧美激情综合五月色丁香小说| 国产视频亚洲| 久久高清一区| 午夜精品成人在线视频| 国产精品美女久久久久久免费| 亚洲国产精品成人| 欧美国产日韩精品| 久久青草久久| 亚洲国产精品欧美一二99| 欧美在线观看一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精品一区二区三区四区高清| 久久激情五月丁香伊人| 午夜激情久久久| 亚洲欧美国产高清va在线播| 欧美日韩专区| 欧美在线观看视频在线| 性做久久久久久免费观看欧美| 国产精品中文在线| 久久久久久69| 欧美日韩亚洲一区二区三区四区 | 欧美在线网址| 一区二区自拍| 一区二区欧美日韩视频| 国产精品日韩精品欧美精品| 久久嫩草精品久久久精品一| 久久久久国产精品麻豆ai换脸| 亚洲人成高清| 亚洲欧美日韩精品久久亚洲区| 激情欧美丁香| 亚洲午夜高清视频| 亚洲精品国产拍免费91在线| 午夜性色一区二区三区免费视频| 亚洲精品久久在线| 羞羞答答国产精品www一本| 99视频有精品| 麻豆久久婷婷| 久久九九国产精品怡红院| 欧美日韩国产高清| 亚洲人成在线观看| 国产一区二区三区高清在线观看 | 日韩小视频在线观看| 精品二区视频| 久久狠狠一本精品综合网| 欧美一区二区黄色| 国产精品萝li| 亚洲欧美日韩视频二区| 日韩视频不卡| 欧美亚洲免费| 亚洲欧美激情诱惑| 欧美视频在线免费看| 在线中文字幕日韩| 午夜精品国产| 国内精品福利| 麻豆精品一区二区av白丝在线| 六月婷婷久久| 亚洲精品影院| 免费成人高清| 99一区二区| 国产精品网红福利| 欧美在线一二三四区| 免费亚洲一区二区| 在线视频你懂得一区| 国产精品你懂的| 久久久www成人免费精品| 欧美成人在线影院| 中文精品视频一区二区在线观看| 国产精品久久毛片a| 久久久久久久综合| 999在线观看精品免费不卡网站| 亚洲欧美日韩在线高清直播| 国产一区二区视频在线观看| 欧美福利一区二区三区| 久久人人97超碰人人澡爱香蕉| 亚洲毛片一区二区| 久久五月婷婷丁香社区| 一本色道久久综合狠狠躁的推荐| 国产午夜精品理论片a级大结局| 欧美精品亚洲一区二区在线播放| 校园激情久久| 亚洲综合激情| 亚洲午夜精品17c|