精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用SQL Server 2008的FILESTREAM特性管理文件

原創
運維 數據庫運維 SQL Server 企業動態
幾乎所有的應用程序都需要某種類型的數據集,至少在檢索某些數據和在用戶界面中顯示時要用到,通常,應用程序會使用到結構化數據和非結構化數據,這樣就引入了極大的挑戰,你不得不在一個事務中創建、更新、刪除和讀取這些完全不同的數據類型,當結構化數據駐留在關系數據庫中而非結構化數據卻存儲在文件系統中時,這個問題尤為嚴重。SQL Server 2008新的FILESTREAM(文件流)特性可以幫助解決這個問題,它讓你可以將非結構化數據存儲在文件系統中,但仍然保持了事務的完整性,本文探討FILESTREAM(文件流)的特性和優點,以及如何運用它..

【51CTO快譯】

SQL Server的FILESTREAM(文件流)特性簡化了基于文件的數據(如圖像)和關系數據同步的過程。

幾乎所有的應用程序都需要某種類型的數據集,至少在檢索某些數據和在用戶界面中顯示時要用到,通常,應用程序會使用到結構化數據和非結構化數據,這樣就引入了極大的挑戰,你不得不在一個事務中創建、更新、刪除和讀取這些完全不同的數據類型,當結構化數據駐留在關系數據庫中而非結構化數據卻存儲在文件系統中時,這個問題尤為嚴重。SQL Server 2008新的FILESTREAM(文件流)特性可以幫助解決這個問題,它讓你可以將非結構化數據存儲在文件系統中,但仍然保持了事務的完整性,本文探討FILESTREAM(文件流)的特性和優點,以及如何運用它幫助你對非結構化數據進行更好地控制。

非結構化數據選項

在SQL Server 2005中,構建一個既依賴于結構化(關系)數據有依賴于非結構化(無關系)數據時,你有兩個選擇:

在數據庫中存儲結構化數據,在一個專用的存儲中存儲非結構化數據,如文件系統和文件服務器,雖然這種方法成本合算,但它引入了額外的復雜度,因為你需要跨關系和非關系系統管理事務的完整性。

將結構化數據和非結構化數據都存儲在數據庫中,多年以來,數據庫一直都支持存儲非關系數據,如二進制大對象,或BLOB,SQL Server稱之為varbinary數據類型,雖然在數據庫中存儲這種數據是很方便的,但成本費用會更高,所需的磁盤空間更多,存儲和檢索時間更長,對應用程序的整體性能也會有負面影響。

在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服務器的文件系統上存儲真實的數據,但可以在數據庫上下文內管理和訪問,這個特性讓SQL Server不僅可以維護好數據庫內記錄的完整性,也能夠維護好數據庫記錄和外部文件之間的完整性。因為這個特性是在現有的varbinary(max)數據類型之上實現的,開發人員可以輕易地用上這個特性,不用對應用程序的架構進行改動。

什么時候使用FILESTREAM(文件流)

在下列任一情景下你都可以考慮使用FILESTREAM(文件流):

當你存儲平均大小不低于1MB的BLOB數據類型時。

當你需要更快、只讀訪問來自應用程序的數據時。

當你想直接從應用程序的中間層代碼訪問BLOB時。

當你需要為單個數據庫事務在數據庫中存儲非關系數據和關系數據時。

啟用FILESTREAM(文件流)

默認情況下,FILESTREAM(文件流)特性是被禁用了的,因此在使用之前,你必須按照下面的步驟配置服務器和數據庫實例:

1、要啟用服務器實例上的FILESTREAM(文件流),打開SQL Server配置管理器,在SQL Server服務上點擊右鍵,然后點擊打開,你會看到一串服務器,在你想要啟用FILESTREAM(文件流)的SQL Server實例上點擊右鍵,從右鍵菜單中選擇“屬性”,切換到FILESTREAM(文件流)標簽,檢查“為Transact-SQL訪問啟用FILESTREAM(文件流)”選項,參考圖1 ,你也可以在這個標簽頁為文件I/O流訪問啟用FILESTREAM(文件流)。

圖1 啟用FILESTREAM(文件流)-在為數據庫實例配置使用FILESTREAM(文件流)訪問之前必須為想要的SQL Server實例啟用FILESTREAM(文件流)

2、要為數據庫實例啟用FILESTREAM(文件流),執行系統存儲過程sp_configure,并設置filestream_access_level參數的值為2,如下:

EXEC sp_configure filestream_access_level, 2
   GO
   RECONFIGURE
   GO

filestream_access_level參數有效的值包括:

◆ 0 在該實例上禁用FILESTREAM(文件流),這是默認值。

◆ 1 為Transact-SQL訪問啟用FILESTREAM(文件流)

◆ 2 為Transact-SQL和Win32流訪問啟用FILESTREAM(文件流)

完成服務器和數據庫實例配置后,接下來是創建存儲數據的真實數據庫,因為FILESTREAM(文件流)是專門為存儲在文件系統上的二進制數據創建的,使用CREATE DATABASE語句時,專門創建一個FILEGROUP標記為流:

CREATE DATABASE FILESTREAMExample
   ON
   PRIMARY (
       NAME = FILESTREAMExample_Primary,
       FILENAME =
        'c:\Projects\DevX\Data\FILESTREAMExample.mdf'),
   FILEGROUP FILESTREAMGroup CONTAINS  FILESTREAM (
       NAME = FILESTREAMExample_FileGroup,
       FILENAME = 'c:\Projects\DevX\Data\FILESTREAMExample')
   LOG ON ( NAME = FILESTREAMExample_Log,
       FILENAME = 
        'c:\Projects\DevX\Data\FILESTREAMExample.ldf')
   GO

接下來,創建一個表,將它的一個列指派為VARBINARY(MAX) FILESTREAM數據類型:

CREATE TABLE Product
   (
     ProductID INT  NOT NULL  PRIMARY KEY,
     Name VARCHAR(50) NOT NULL,
     Picture VARBINARY(MAX) FILESTREAM  NULL,
     RowGuid UNIQUEIDENTIFIER  NOT NULL  ROWGUIDCOL
     UNIQUE DEFAULT NEWID()
   )
   GO

前面的表定義指定Picture列為varbinary(max)類型,并啟用了FILESTREAM(文件流)屬性,注意:凡是有FILESTREAM(文件流)列的表必須要包括一個非空唯一性ROWGUID列。

所有存儲在Picture列中的二進制數據都不能通過文件系統訪問,訪問這個二進制數據的唯一方法是通過標準的CRUD (INSERT,UPDATE和 DELETE)SQL語句,下面的例子是向Product表中插入一行數據:

INSERT INTO Product VALUES(1, 'Bicycle', 0x00, default)
   GO


插入的新行ProductID等于1,Name包括Bicycle,Picture列為NULL,RowGuid列包括一些默認的GUID值,現在你可以在.NET程序中檢索這一行,當然也可以覆蓋和擴展它的內容。

#p#

使用FILESTREAM(文件流)寫入數據

在這個例子中,假設用戶產生了一些輸入,要將這些輸入內容轉換成字節數組,并將其存儲在Product表的Picture列中,接下來創建一個Visual C#視窗應用程序,命名為FileStreamExample,在新項目的默認表單上,添加一個按鈕,命名為btnWriteFile,一個名叫txtInput的文本輸入框(TextBox),一個命名為lstResults的列表框(ListBox),然后,在按鈕上雙擊創建一個click事件處理器,包括清單1中的代碼。

清單1 使用FILESTREAM存儲數據

private void btnWriteFile_Click(object sender, EventArgs e)
{
 string connectionString =   
  ConfigurationManager.ConnectionStrings
  ["fileStreamDB"].ConnectionString;
 using (SqlConnection connection = new 
  SqlConnection(connectionString))
 {
  connection.Open();
  SqlCommand command = new SqlCommand();
  command.Connection = connection;
  //Get the PathName of the File from the database
  command.CommandText = "SELECT Picture.PathName(), "   +   
   "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product " +
   "WHERE ProductID = 1";
  SqlTransaction transaction = connection.BeginTransaction
   (IsolationLevel.ReadCommitted);
  command.Transaction = transaction;
  using (SqlDataReader reader = command.ExecuteReader())
  {
   while (reader.Read())
   {
    string path = reader.GetString(0);
    SqlFileStream stream = new SqlFileStream(path,
     (byte[])reader.GetValue(1), FileAccess.Write,
     FileOptions.SequentialScan, 0);
    string contents = txtInput.Text;
    stream.Write((System.Text.Encoding.ASCII.GetBytes(contents)), 
     0, contents.Length);
    stream.Close();
   }
  }
  transaction.Commit();
 }
 MessageBox.Show("File contents successfully written");
}

它從app.config使用ConfigurationManager.ConnectionStrings屬性檢索連接字符串:

string connectionString =  ConfigurationManager.ConnectionStrings
    ["fileStreamDB"].ConnectionString;


連接字符串存儲在app.config中,如下:

<?xml version="1.0" encoding="utf-8" ?>
   <configuration>
    <connectionStrings>
     <add name="fileStreamDB"  
      connectionString="server=localhost\SqlServer2008;
      database=FILESTREAMExample;integrated security=SSPI;
      persist security info=False;"/>
    </connectionStrings>
   </configuration>



接下來它打開一個到數據庫的連接,為SqlCommand對象分配屬性值,然后以ProductID=1為條件檢索Products表:

command.Connection = connection;
   //從數據庫獲取文件的路徑
   command.CommandText = "SELECT Picture.PathName(), "
    + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product "
    + "WHERE ProductID = 1";




這個SQL語句使用了新的函數GET_FILESTREAM_TRANSACTION_CONTEXT ()檢索當前運行的會話事務,你可以綁定FILESTREAM(文件流)文件系統操作到該事務上,但這個事務必須是已經啟動了的,并且也不能被異常終止或提交,當沒有明確啟動的事務可用的,它返回NULL值。

因此,下面的代碼調用SqlConnection.BeginTransaction()方法創建一個新的SqlTransaction對象,并將其分配給SqlCommand對象:

SqlTransaction transaction = 
     connection.BeginTransaction(IsolationLevel.ReadCommitted);
   command.Transaction = transaction;





至此,清單1啟動ExecuteReader()方法執行SQL語句,執行完查詢后,返回文件流的路徑,并向它分配一個本地變量:

string path = reader.GetString(0);




你需要一個流寫入到文件中,因此,接下來要創建一個SqlFileStream類的實例,提供路徑、事務上下文、文件訪問目錄、文件選項一覽表和分配大小:

SqlFileStream stream = new SqlFileStream(path,
     (byte[])reader.GetValue(1), FileAccess.Write,
     FileOptions.SequentialScan, 0);





SqlFileStream類是一個新類(SQL Server 2008中才引入的),它提供了以字節序列方式訪問FILESTREAM(文件流)列的方法,表1對SqlFileStream類暴露在外的屬性做了一個簡單的描述。

表1 SqlFileStream類屬性

接下來清單1開始檢索用戶的輸入,轉換成字節數組,然后寫入到文件流中:

string contents = txtInput.Text;             
   stream.Write((System.Text.Encoding.ASCII.GetBytes(contents)), 0,
     contents.Length);
   stream.Close();






最后,清單1調用SqlTransaction.Commit()方法提交事務:

transaction.Commit();






以上就是往由數據庫管理的啟用了FILESTREAM(文件流)特性的文件的基本過程,既然已經知道如何寫入FILESTREAM列,那從FILESTREAM列讀取就簡單了。

#p#

使用FILESTREAM讀取數據

在C#項目的默認表單上,添加一個按鈕,命名為btnReadFile,在click事件中插入清單2中的代碼。

清單2 使用FILESTREAM讀取數據。這個click事件處理程序從數據庫讀取FILESTREAM列中的內容。

private void btnReadFile_Click(object sender, EventArgs e)
{
 string connectionString =  ConfigurationManager.ConnectionStrings
  ["fileStreamDB"].ConnectionString;               
 using (SqlConnection connection = new
  SqlConnection(connectionString))
 {
  connection.Open();
  SqlCommand command = new SqlCommand();
  command.Connection = connection;
  //Get the PathName of the File from the database
  command.CommandText = "SELECT Picture.PathName(), "
   + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product "
   + "WHERE ProductID = 1";
  SqlTransaction transaction =
   connection.BeginTransaction(IsolationLevel.ReadCommitted);
  command.Transaction = transaction;
  using (SqlDataReader reader = command.ExecuteReader())
  {
   while (reader.Read())
   {                       
    string path = reader.GetString(0);
    SqlFileStream stream = new SqlFileStream(path,
     (byte[])reader.GetValue(1),FileAccess.Read,
     FileOptions.SequentialScan, 0);                       
    lstResults.Items.Clear();
    int length = (int) stream.Length;
    byte[] contents = new byte[length];
    stream.Read(contents,0,length);                    
    string results = System.Text.Encoding.ASCII.GetString
     (contents);
    lstResults.Items.Add(results);
    stream.Close();
   }
  }
  transaction.Commit();
 }
}       

為了簡單起見,我只討論與前面不同的代碼,當你創建一個SqlFileStream時,你需要指出你打開的文件流:

SqlFileStream stream = new SqlFileStream(path,
        (byte[])reader.GetValue(1),FileAccess.Read,
        FileOptions.SequentialScan, 0);







接下來,讀取文件流的內容,轉換成字節數組,再轉換成字符串,最后在列表框(ListBox)中顯示出來:

int length = (int) stream.Length;
       byte[] contents = new byte[length];
       stream.Read(contents,0,length);                    
       string results = System.Text.Encoding.ASCII.GetString
        (contents);
       lstResults.Items.Add(results);







當你運行這個應用程序時,你會看到一個類似于圖2的屏幕,當你點擊“寫入文件”按鈕時,應用程序把文本框(TextBox)中的內容寫入到文件流中;當你點擊“讀取文件”按鈕時,應用程序從文件流讀取內容,將其顯示在列表框(ListBox)中。

圖2 示例項目-通過使用SqlFileStream類讀取和寫入FILESTREAM列中的內容

接下來的例子顯示如何擴展現有數據庫中的文件流。

使用FILESTREAM追加數據

增加一個命令按鈕,命名為btnAppendFile,使用清單3中的代碼作為它的click事件處理程序代碼。

清單3 使用FILESTREAM追加數據

FILESTREAM. 
  private void btnAppendFile_Click(object sender, EventArgs e)
  {
   string connectionString =  
    ConfigurationManager.ConnectionStrings
    ["fileStreamDB"].ConnectionString;                          
   using (SqlConnection connection = new
    SqlConnection(connectionString))
   {
    connection.Open();
    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    //Get the PathName of the File from the database
    command.CommandText = "SELECT Picture.PathName(), "
     + "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM Product "
     + "WHERE ProductID = 1";
    SqlTransaction transaction =
     connection.BeginTransaction(IsolationLevel.ReadCommitted);
    command.Transaction = transaction;
    using (SqlDataReader reader = command.ExecuteReader())
    {
     while (reader.Read())
     {
      string path = reader.GetString(0);                       
      SqlFileStream stream = new SqlFileStream(path,
       (byte[])reader.GetValue(1), FileAccess.ReadWrite,
       FileOptions.SequentialScan, 0);
      stream.Seek(0, SeekOrigin.End);
      string contents = txtInput.Text;
      stream.Write((System.Text.Encoding.ASCII.GetBytes
       (contents)), 0, contents.Length);                       
      stream.Close();
     }
    }
    transaction.Commit();
   }
   MessageBox.Show("File contents successfully appended");
  }

這次當你實例化SqlFileStream對象時,將文件訪問權設為ReadWrite,因此你可以讀取和寫入文件流。

SqlFileStream stream = new SqlFileStream(path,
      (byte[])reader.GetValue(1), FileAccess.ReadWrite,
      FileOptions.SequentialScan, 0);








然后移動文件流的指針到文件末尾,這樣你就可以追加數據了:

stream.Seek(0, SeekOrigin.End);








接下來使用SqlFileStream.Write()方法將用戶輸入的內容寫入到文件流中:

stream.Write((System.Text.Encoding.ASCII.GetBytes
      (contents)), 0, contents.Length);   








最后調用SqlTransaction.Commit()方法提交事務。

FILESTREAM的優點

這就是全部過程,現在你可以讀取、寫入和追加數據到數據庫管理的文件中了,雖然這個過程可能比使用文件或在BLOB中存儲數據更復雜一些,你會發現使用數據庫來管理文件由許多好處。

◆ 使用單個數據存儲就可以同時訪問非關系和關系數據。

◆ 在數據庫備份和還原期間SQL Server自動包括非關系數據(BLOB)。

◆ 沒有文件大小限制,varbinary(max)數據類型最大不能超過2GB,唯一受限的就是NTFS文件系統上的可用空間。

◆ 你可以在單個事務中同時插入、更新和刪除關系數據和非關系數據。

◆ 使用FILESTREAM效率更高,因為SQL Server不再使用緩沖區內存操作非關系數據(BLOB)。

◆ 你可以使用ADO.NET在中間層代碼直接訪問非關系數據,不用再求值于獨立的API了。

◆ 依賴于文件大小,NTFS文件系統可以比SQL Server更快地保存和檢索大型BLOB。

本文向你展示了如何實現新的FILESTREAM特性,正如你所看到的,當你想在一個事務中同時存儲關系數據和非關系數據時,FILESTREAM提供了一個易于使用的事務編程模型。

原文:Managing Files with SQL Server 2008's FILESTREAM Feature        

作者:Thiru Thangarathinam

【51CTO獨家譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com

【編輯推薦】

  1. SQL Server 2008 的恢復和備份模式
  2. SQL Server 2008新特性——FILESTREAM
  3. 視頻教程下載:SQL Server 2008 的安全性改進
責任編輯:楊鵬飛 來源: 51CTO
相關推薦

2009-02-24 13:15:22

FILESTREAM新特性SQL Server

2011-08-29 18:02:29

SQL Server FileStream

2010-07-13 15:29:24

SQL Server

2011-04-11 12:55:34

SQL Server 平面文件

2011-05-24 13:39:49

SQL Server

2011-03-29 13:10:56

SQL Server

2009-04-08 09:29:34

SQL Server新特性Resource Go

2009-11-12 10:12:21

主數據管理SQL Server

2011-03-15 09:33:18

SQL Server 集成服務

2009-02-16 17:03:57

管理開發效能

2010-06-29 17:38:01

SQL Server

2009-02-16 15:41:04

非結構化數據SQL Server SQL Server

2010-04-30 14:18:14

2009-04-16 18:07:39

2009-04-16 17:30:00

可伸縮管理集成

2009-04-16 15:44:10

可管理性SQL Server

2009-04-16 16:54:53

集成IntegrationSSIS

2010-07-09 09:46:28

SQL Server

2011-09-01 10:46:56

SQL Server 快速清理日志文件

2011-08-01 10:09:57

SSAS數據庫
點贊
收藏

51CTO技術棧公眾號

欧美人与物videos另类| 久久亚洲精品毛片| 国产野外作爱视频播放| 4438x成人网全国最大| 99视频在线观看一区三区| 日本久久久久久久久久久| 亚洲黄色网址大全| 精品福利一区| 欧美一区二区三区小说| aaa毛片在线观看| 日本大片在线播放| 日本一区二区免费在线| 国产伦精品一区二区三区高清| 天天天天天天天干| 亚洲日本黄色| 久久亚洲精品中文字幕冲田杏梨| 亚洲久久久久久| 日韩一区二区三区色| 色综合久久中文字幕| 国产资源第一页| 国产精品99999| 成人动漫中文字幕| 成人国内精品久久久久一区| 亚洲精品男人的天堂| 欧美日韩第一区| 日韩专区在线播放| 美女爆乳18禁www久久久久久| 中文一区二区三区四区| 欧美午夜精品电影| 国产日产欧美视频| wwwww亚洲| 亚洲男人的天堂网| 一区二区在线中文字幕电影视频 | 日韩av一卡二卡| a级大片免费看| 亚洲午夜国产成人| 欧美系列日韩一区| 99视频在线免费| 中文字幕资源网在线观看免费 | 销魂美女一区二区| 亚洲黄网站黄| 韩剧1988免费观看全集| 久久综合久久鬼| 欧美jjzz| 九九热精品视频国产| 人人澡人人澡人人看| 日韩欧美一区免费| 日韩在线免费av| 天美传媒免费在线观看| 成人免费电影网址| 一区二区欧美久久| 欧日韩不卡视频| 久久神马影院| 久久精品国产免费观看| 天天操天天摸天天舔| 日韩一区二区三区免费播放| 中文字幕视频在线免费欧美日韩综合在线看 | 成人精品国产福利| 国产精品麻豆免费版| 人妻一区二区三区免费| 99久久精品情趣| 久久人人九九| 国产一级在线观看| 国产精品素人一区二区| 做爰高潮hd色即是空| 国产二区三区在线| 亚洲伊人伊色伊影伊综合网| 人体内射精一区二区三区| av免费不卡国产观看| 动漫精品一区二区| 欧美日韩亚洲一二三| jvid一区二区三区| 91精品视频网| 永久免费未满蜜桃| 亚洲自拍中文字幕| 神马午夜电影一区二区三区在线观看 | 欧美xxxxx少妇| 亚洲自拍都市欧美小说| 伊人久久综合97精品| 国产馆在线观看| 一区二区在线影院| 国内揄拍国内精品| 久久久蜜桃一区二区| 蜜臀av一区二区在线免费观看| 91精品中国老女人| 少妇高潮久久久| 欧美—级在线免费片| 正在播放一区| 久草免费在线视频| 欧美日韩高清一区二区三区| 亚洲成年人在线观看| 国产伦精品一区二区三区视频 | 麻豆国产精品一区二区三区 | 香港日本韩国三级网站| 免费欧美网站| 亚洲欧美一区二区三区四区| 色欲一区二区三区精品a片| 亚洲免费成人| 国产综合福利在线| 国产小视频免费观看| 国产日产欧美一区二区三区| 日本大片免费看| 日本欧美一区| 欧美精品一区二区三区蜜桃视频 | 国产精品夫妻激情| 国产女优在线播放| 国产精品一二二区| 日韩欧美在线电影| 国产精品蜜臀| 欧美精选一区二区| 九色porny自拍视频| 影音先锋日韩在线| 国产精品免费视频xxxx| 亚洲精品久久久久久无码色欲四季| 国产亚洲欧美激情| 少妇高潮毛片色欲ava片| 欧美成人福利| 亚洲人在线视频| 国产成人无码精品亚洲| 国产激情91久久精品导航 | 亚洲视频碰碰| 91久久久精品| 在线观看免费高清完整| 色综合久久中文字幕| 中文字幕a在线观看| 亚洲综合五月| 成人有码在线播放| av在线1区2区| 日本韩国欧美一区| 少妇特黄一区二区三区| 最新国产拍偷乱拍精品| 成人欧美视频在线| 高清全集视频免费在线| 欧美日韩免费视频| 五月婷婷婷婷婷| 日本vs亚洲vs韩国一区三区| 看欧美日韩国产| 色偷偷色偷偷色偷偷在线视频| 欧美草草影院在线视频| 污软件在线观看| 韩国午夜理伦三级不卡影院| 亚洲精品在线视频观看| 精品国产黄a∨片高清在线| 国产一区二区三区视频 | 国产精品一区hongkong| 欧美成人精精品一区二区频| 欧美人妻精品一区二区三区| 国产激情视频一区二区在线观看| 可以在线看黄的网站| а天堂中文最新一区二区三区| 日韩最新av在线| 国产一区二区在线播放视频| 国产精品成人网| 三级黄色片播放| 亚洲经典一区| 亚洲综合av影视| www在线看| 日韩久久免费电影| 18国产免费视频| 中文字幕日韩欧美一区二区三区| 九九九九九国产| 欧美日韩国产在线一区| 国产精品视频一区二区三区经| free性m.freesex欧美| 日韩av综合网站| 中文字幕国产在线观看| 久久九九久精品国产免费直播| 国产激情在线观看视频| gogogo高清在线观看一区二区| 国产精品免费一区豆花| 日本最新在线视频| 日韩欧美123| 中文字幕亚洲精品一区| 欧美精彩视频一区二区三区| 性chinese极品按摩| 在线精品国产| 精品乱色一区二区中文字幕| 美女色狠狠久久| 久久综合久久88| 色wwwwww| 欧美性xxxxx极品少妇| 国产大片免费看| 粉嫩一区二区三区性色av| 日日碰狠狠添天天爽超碰97| 日韩黄色大片网站| 国产精品视频500部| 亚洲国产尤物| 久热精品视频在线免费观看| 五月婷婷在线观看视频| 欧美日韩精品二区第二页| 国产97免费视频| 91毛片在线观看| 天堂中文av在线| 国产日韩亚洲欧美精品| 亚洲一区三区视频在线观看| 中文久久电影小说| 国产精品入口免费视频一| 电影k8一区二区三区久久| 亚洲美女av电影| www.色呦呦| 一本久久精品一区二区| 青青草手机在线视频| 久久亚洲私人国产精品va媚药| av亚洲天堂网| 久久国产精品毛片| 特级西西444| 首页国产精品| 欧美连裤袜在线视频| 亚洲日本va| 国产日本欧美视频| 深夜成人在线| 久国内精品在线| 黄在线免费观看| 一区二区三区精品99久久| 天天干,夜夜操| 日韩欧美色电影| 欧美另类高清videos的特点| 五月综合激情日本mⅴ| 国产一二三四区| 国产精品视频看| 加勒比一区二区| 成人久久视频在线观看| 97人人模人人爽人人澡| 免费在线观看精品| 日韩精品一区二区三区不卡| 亚洲精品一二| 无码日本精品xxxxxxxxx| 91成人影院| 中文字幕99| 欧美国产小视频| 亚洲视频导航| 日韩系列欧美系列| 亚洲欧美99| 青青草成人影院| 午夜精品一区二区三区在线观看 | 久久亚洲欧美日韩精品专区| 尤物视频在线免费观看| 亚洲欧美视频在线| 牛牛澡牛牛爽一区二区| 日韩不卡在线观看| 日韩黄色影片| 亚洲一品av免费观看| 猫咪在线永久网站| 亚洲天堂男人的天堂| 免费在线黄色电影| 亚洲人成在线观| 国产高清美女一级毛片久久| 亚洲一品av免费观看| 国产日本在线视频| 在线精品91av| 欧美a在线看| 久久视频在线视频| av片在线观看永久免费| 麻豆国产精品va在线观看不卡| 福利视频在线| 色综合91久久精品中文字幕| 免费男女羞羞的视频网站在线观看 | 欧美日韩成人一区| 国产又色又爽又黄又免费| 欧美一级在线视频| 日韩中文字幕观看| 精品视频在线导航| 95在线视频| 久久久成人av| 成人超碰在线| 欧洲亚洲免费在线| 日韩黄色在线| 成人在线视频电影| 亚洲欧洲av| 一区二区三区视频| 亚洲午夜精品一区 二区 三区| 国产成人一区二区三区别| 亚洲黄色影院| 日韩肉感妇bbwbbwbbw| 国产精品白丝jk黑袜喷水| www.88av| 国产精品国产三级国产普通话三级| 国产美女久久久久久| 亚洲成人在线免费| 在线免费观看av网址| 欧美一区二区三区四区五区| 日本美女一级片| 最近2019中文字幕mv免费看| 中文字幕在线三区| 国产91成人在在线播放| 国产精品高潮久久| 国产v亚洲v天堂无码| av伊人久久| 999一区二区三区| 日韩国产欧美在线观看| 95视频在线观看| 欧美激情综合五月色丁香| 久久久久久久久艹| 在线观看亚洲精品视频| 国产 欧美 自拍| 深夜福利91大全| 原纱央莉成人av片| 91丝袜脚交足在线播放| 国产欧美日韩免费观看| 狠狠噜天天噜日日噜| 日韩高清国产一区在线| 中文字幕在线视频播放| 综合av第一页| 久久精品视频7| 欧美videos中文字幕| jyzzz在线观看视频| 97在线观看免费| 国产麻豆一区二区三区| 欧美一区少妇| 999在线观看精品免费不卡网站| 97超碰人人爽| 国产欧美日韩精品一区| 午夜毛片在线观看| 日韩精品一区二区三区蜜臀| 91激情在线| 日本高清不卡的在线| 第四色中文综合网| 国产系列第一页| 欧美aaaaaa午夜精品| 亚洲人人夜夜澡人人爽| 一区二区三区中文字幕在线观看| 最新在线中文字幕| 亚洲毛片在线观看| 国产高清自产拍av在线| 99re在线视频观看| 亚洲成av人片乱码色午夜| www.超碰com| 久久综合精品国产一区二区三区| 久青草视频在线观看| 91精品欧美综合在线观看最新| 色综合久久影院| 国产精品视频中文字幕91| 激情五月综合| 九色porny91| 久久精品视频免费观看| 日本三级小视频| 日韩精品视频免费| 国产无遮挡裸体视频在线观看| 国产乱码精品一区二区三区不卡| 欧美激情四色| 师生出轨h灌满了1v1| 一区二区三区在线视频观看| 国产高中女学生第一次| 久久亚洲春色中文字幕| 经典三级久久| 六月婷婷激情网| 国产经典欧美精品| 国产亚洲精品久久777777| 欧美精品一区二区三区很污很色的 | 91欧美国产| 99视频在线观看视频| 亚洲免费电影在线| 国产叼嘿视频在线观看| 欧美激情xxxx性bbbb| 美国成人xxx| 日日碰狠狠丁香久燥| 中文字幕成人在线观看| 一区二区www| 精品中文字幕在线观看| 国产精品zjzjzj在线观看| 国产精品秘入口18禁麻豆免会员| www激情久久| 中文亚洲av片在线观看| 久久精品国产综合| 白嫩白嫩国产精品| 欧美 日本 亚洲| 欧美激情中文字幕一区二区| 国产又黄又大又爽| 久久久久久成人精品| 台湾佬综合网| 三上悠亚在线一区| 亚洲免费在线播放| 日本高清视频免费观看| 国产99久久精品一区二区| 欧美成人激情| 亚洲色图欧美日韩| 色久优优欧美色久优优| 久久bbxx| 精品视频一区二区三区四区| 免费国产亚洲视频| 欧洲猛交xxxx乱大交3| 日韩av在线导航| 欧洲精品久久久久毛片完整版| 无码日本精品xxxxxxxxx| 国产三级精品三级在线专区| 精品久久人妻av中文字幕| 日韩av色综合| 亚洲成人一区| 疯狂揉花蒂控制高潮h| 欧美日韩精品福利| 亚洲插插视频| 路边理发店露脸熟妇泻火| 久久综合色天天久久综合图片| 国产一区二区三区黄片| 97在线视频免费播放| 99热国内精品永久免费观看| 亚洲一区二区三区综合| 欧美狂野另类xxxxoooo| 超碰中文在线| 欧美日韩视频免费在线观看|