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

PostgreSQL的PDF.NET驅動程序構建過程

數據庫 其他數據庫 PostgreSQL
目前有兩種主要的PostgreSQL的.NET驅動程序,分別是Npgsql和dotConnector for PostgreSQL(以下簡稱dotConnector),這兩者都是第三方的.NET Provider,本文將大致講解一下這兩個驅動程序的安裝方式,并講解如何利用它們構建PDF.NET的驅動程序,使得PDF.NET數據開發框架可以支持訪問PostgreSQL數據庫。

目前有兩種主要的PostgreSQL的.NET驅動程序,分別是Npgsql和dotConnector for PostgreSQL(以下簡稱dotConnector),這兩者都是第三方的.NET Provider,本文將大致講解一下這兩個驅動程序的安裝方式,并講解如何利用它們構建PDF.NET的驅動程序,使得PDF.NET數據開發框架可以支持訪問PostgreSQL數據庫。

一、安裝PostgreSQL的.NET驅動程序

1,Npgsql的安裝:

PostgreSQL數據庫程序可以去官網http://www.postgresql.org/下載,在寫本篇文章的時候,***版本已經是9.1了,我下載使用的是9.0.4. 下載安裝以后,打開程序 Application Stack Builder,選擇已經安裝好的數據庫以后,單擊下一步進入到如下界面

 

在Datase Drivers選項中,這里選擇Npgsql v2.0.11-1,其它驅動程序根據需要安裝。選擇好以后,按照提示一步步即可完整安裝好.NET的數據驅動程序。

2,dotConnect For PostgreSQL 安裝

在網上搜索一下這個驅動程序,我是從下面的地址安裝的:http://wzmcc.newhua.com/soft/92182.htm安裝文件名是 dcpostgresqlfree.exe,版本是 5.30.160,安裝的時候會選擇是否將程序集編譯到GAC中。安裝完成以后在安裝目錄會有幾個簡單的示例程序解決方案:

 

大家可以打開示例程序解決方案看看,都很簡單,具體如何使用可以看本篇文章的下面部分。

#p#

二、構建PDF.NET For PostgreSQL驅動程序

根據上面的步驟,安裝了.NET的PostgreSQL驅動程序以后,就可以直接按照示例來訪問PostgreSQL數據庫了,但這兩種不同的驅動程序讓我們難以選擇使用哪一種,而且它們直接提供的ADO.NET實現用起來也不是十分方便,我們有必要將它們包裝一下,簡化使用方式。PDF.NET數據開發框架內置了MS DAAB類似的AdoHelper數據訪問抽象類,所以只要繼承該類就可以擁有PDF.NET強大的數據訪問能力。

1,包裝Ngpsql驅動程序

下面以Npgsql為例,看看如何讓PDF.NET支持PostgreSQL。下面是貼出全部代碼:

  1. using System;  
  2. using System.Collections.Generic;  
  3. //using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using Npgsql ;  
  7.  
  8. namespace PWMIS.DataProvider.Data  
  9. {  
  10.     /// <summary>  
  11.     /// PostgreSQL數據訪問類  
  12.     /// </summary>  
  13.     public class PostgreSQL : AdoHelper  
  14.     {  
  15.         /// <summary>  
  16.         /// 默認構造函數  
  17.         /// </summary>  
  18.         public PostgreSQL()  
  19.         {  
  20.             //  
  21.             // TODO: 在此處添加構造函數邏輯  
  22.             //  
  23.         }  
  24.         /// <summary>  
  25.         /// 獲取當前數據庫類型的枚舉  
  26.         /// </summary>  
  27.         public override PWMIS.Common.DBMSType CurrentDBMSType  
  28.         {  
  29.             get { return PWMIS.Common.DBMSType.PostgreSQL ; }   
  30.         }  
  31.  
  32.         /// <summary>  
  33.         /// 創建并且打開數據庫連接  
  34.         /// </summary>  
  35.         /// <returns>數據庫連接</returns>  
  36.         protected override IDbConnection GetConnection()  
  37.         {  
  38.             IDbConnection conn = base.GetConnection();  
  39.             if (conn == null)  
  40.             {  
  41.                 conn = new NpgsqlConnection (base.ConnectionString);  
  42.                 //conn.Open ();  
  43.             }  
  44.             return conn;  
  45.         }  
  46.  
  47.         /// <summary>  
  48.         /// 獲取數據適配器實例  
  49.         /// </summary>  
  50.         /// <returns>數據適配器</returns>  
  51.         protected override IDbDataAdapter GetDataAdapter(IDbCommand command)  
  52.         {  
  53.             IDbDataAdapter ada = new NpgsqlDataAdapter((NpgsqlCommand)command);  
  54.             return ada;  
  55.         }  
  56.  
  57.         /// <summary>  
  58.         /// 獲取一個新參數對象  
  59.         /// </summary>  
  60.         /// <returns>特定于數據源的參數對象</returns>  
  61.         public override IDataParameter GetParameter()  
  62.         {  
  63.             return new NpgsqlParameter();  
  64.         }  
  65.  
  66.         /// <summary>  
  67.         ///  獲取一個新參數對象  
  68.         /// </summary>  
  69.         /// <param name="paraName">參數名</param>  
  70.         /// <param name="dbType">參數數據類型</param>  
  71.         /// <param name="size">參數大小</param>  
  72.         /// <returns>特定于數據源的參數對象</returns>  
  73.         public override IDataParameter GetParameter(string paraName, System.Data.DbType dbType, int size)  
  74.         {  
  75.             NpgsqlParameter para = new NpgsqlParameter();  
  76.             para.ParameterName = paraName;  
  77.             para.DbType = dbType;  
  78.             para.Size = size;  
  79.             return para;  
  80.         }  
  81.  
  82.         /// <summary>  
  83.         /// 返回此 NpgsqlConnection 的數據源的架構信息。  
  84.         /// </summary>  
  85.         /// <param name="collectionName">集合名稱</param>  
  86.         /// <param name="restrictionValues">請求的架構的一組限制值</param>  
  87.         /// <returns>數據庫架構信息表</returns>  
  88.         public override DataTable GetSchema(string collectionName, string[] restrictionValues)  
  89.         {  
  90.             using (NpgsqlConnection conn = (NpgsqlConnection)this.GetConnection())  
  91.             {  
  92.                 conn.Open();  
  93.                 if (restrictionValues == null && string.IsNullOrEmpty(collectionName))  
  94.                     return conn.GetSchema();  
  95.                 else if (restrictionValues == null && !string.IsNullOrEmpty(collectionName))  
  96.                 {  
  97.                     if (collectionName == "Procedures")  
  98.                         return this.getProcedures();  
  99.                     else 
  100.                         return conn.GetSchema(collectionName); //Procedures  
  101.  
  102.                 }  
  103.                 else 
  104.                 {   
  105.                     if (collectionName == "ProcedureParameters")  
  106.                         return getFunctionArgsInfo(restrictionValues[2]);  
  107.                     else 
  108.                         return conn.GetSchema(collectionName, restrictionValues);  
  109.                 }  
  110.             }  
  111.         }  
  112.  
  113.         /// <summary>  
  114.         /// 預處理SQL語句,語句中不能包含"`"(反引號,tab鍵上面的那個符號)號,如果需要,請使用參數化查詢。  
  115.         /// </summary>  
  116.         /// <param name="SQL"></param>  
  117.         /// <returns></returns>  
  118.         protected override string PrepareSQL(ref string SQL)  
  119.         {  
  120.             return SQL.Replace("[""\"").Replace("]""\"");  
  121.         }  
  122.  
  123.         /// <summary>  
  124.         /// 獲取或者設置自增列對應的序列名稱  
  125.         /// </summary>  
  126.         public override string InsertKey  
  127.         {  
  128.             get 
  129.             {  
  130.                 return string.Format("select currval('\"{0}\"')",base.InsertKey );  
  131.             }  
  132.             set 
  133.             {  
  134.                 base.InsertKey = value;  
  135.             }  
  136.         }  
  137.  
  138.         /// <summary>  
  139.         /// 定義獲取PostgreSQL的函數參數的函數  
  140.         /// <seealso cref="http://www.alberton.info/postgresql_meta_info.html"/>  
  141.         /// </summary>  
  142.         private void createFunctionArgsInfo()  
  143.         {  
  144.             //由于函數定義語句較長,放到了資源文件中  
  145.             string sql = PWMIS.PostgreSQLClient.Properties.Resources.sql_function_args;  
  146.             this.SqlServerCompatible = false;  
  147.             this.ExecuteNonQuery(sql);  
  148.         }  
  149.  
  150.         /// <summary>  
  151.         /// 獲取函數的參數信息  
  152.         /// </summary>  
  153.         /// <param name="functionName">函數名</param>  
  154.         /// <returns></returns>  
  155.         private DataTable  getFunctionArgsInfo(string functionName)  
  156.         {  
  157.             string sql = string.Format("select * from function_args('{0}','public');", functionName);  
  158.             DataSet ds = null;  
  159.             try 
  160.             {  
  161.                 ds= this.ExecuteDataSet(sql);  
  162.             }  
  163.             catch 
  164.             {  
  165.                 createFunctionArgsInfo();  
  166.                 ds = this.ExecuteDataSet(sql);  
  167.             }  
  168.              
  169.             DataTable dt = ds.Tables[0];  
  170.             dt.Columns["pos"].ColumnName = "ordinal_position";  
  171.             dt.Columns["argname"].ColumnName = "PARAMETER_NAME";  
  172.             dt.Columns["datatype"].ColumnName = "DATA_TYPE";  
  173.             dt.Columns["direction"].ColumnName = "PARAMETER_MODE";  
  174.             dt.Columns.Add("IS_RESULT"typeof(string));  
  175.             dt.Columns.Add("CHARACTER_MAXIMUM_LENGTH"typeof(int));  
  176.  
  177.             foreach (DataRow row in dt.Rows)  
  178.             {  
  179.                 if(row["PARAMETER_NAME"] == DBNull.Value)  row["PARAMETER_NAME"] =  "";   
  180.                 row["IS_RESULT"] = row["PARAMETER_NAME"].ToString() == "RETURN VALUE" ? "YES" : "NO";  
  181.                 row["PARAMETER_MODE"] = row["PARAMETER_MODE"].ToString() == "o" ? "OUT" : row["PARAMETER_MODE"].ToString() == "i" ? "IN" : row["PARAMETER_MODE"];  
  182.             }  
  183.             return dt;  
  184.         }  
  185.  
  186.         private DataTable getProcedures()  
  187.         {  
  188.             string sql = @"SELECT routine_name  
  189.   FROM information_schema.routines  
  190.  WHERE specific_schema NOT IN  
  191.        ('pg_catalog''information_schema')  
  192.    AND type_udt_name != 'trigger';";  
  193.             return this.ExecuteDataSet(sql).Tables[0];  
  194.         }  
  195.     }  
  196. }  

注意上面程序中的 PrepareSQL 方法,它將SQLSERVER格式的SQL語句轉換成PostgreSQL支持的格式,SQLSERVER使用成對的中括號來限定對象名,而PostgreSQL使用雙引號,尤其在對象名稱使用了大小寫混合的情況。另外程序為了支持獲取數據庫的架構信息,重寫了AdoHelper的抽象方法GetSchema,有關PostgreSQL具體獲取表架構信息的內容,請參看 http://www.alberton.info/postgresql_meta_info.html 。

#p#

2,包裝dotConnect驅動程序

程序代碼與使用Npgsql類似,區別主要是將上面代碼中的Npgsql字樣替換成PgSql即可,引用Devart.Data.dll,Devart.Data.PostgreSql.dll,使用下面的名稱空間:

  1. using Devart.Data.PostgreSql;  

由于dotConnect的驅動程序采用Oracle驅動程序的風格,要求SQL語句的參數使用“:”作為參數名稱,而不是SqlServer樣式的“@”,所以下面的方法需要重寫:

  1. /// <summary>  
  2. /// 預處理SQL語句,語句中不能包含中括號,如果需要,請使用參數化查詢。  
  3. /// </summary>  
  4. /// <param name="SQL"></param>  
  5. /// <returns></returns>  
  6. protected override string PrepareSQL(ref string SQL)  
  7. {  
  8.     return SQL.Replace("[""\"").Replace("]""\"").Replace("@",":");  
  9. }  
  10.  
  11. public override string GetParameterChar  
  12. {  
  13.     get 
  14.     {  
  15.         return ":";  
  16.     }  

到此為止,使用dotConnect做PDF.NET的PostgreSQL驅動程序也做好了。

三、使用PDF.NET For PostgreSQL驅動程序

1,使用配置

假定上面使用Npgsql和dotConnect驅動的程序分別是 PWMIS.PostgreSQLClient 程序集中的程序,名稱分別是

PWMIS.DataProvider.Data.PostgreSQL

PWMIS.DataProvider.Data.dotConnectPostgreSQL

那么我們在應用程序配置文件里面如下使用即可:

使用Npgsql訪問:

  1. <add name="ConnectionSetting" connectionString="server=192.168.XX.XX;User Id=postgres;password=XXXX;DataBase=XXDB" providerName="PWMIS.DataProvider.Data.PostgreSQL,PWMIS.PostgreSQLClient"/> 

使用dotConnect訪問:

  1. <add name="ConnectionSetting" connectionString="server=192.168.XX.XX;User Id=postgres;password=XXXX;DataBase=XXDB" providerName="PWMIS.DataProvider.Data.dotConnectPostgreSQL,PWMIS.PostgreSQLClient"/> 

#p#

2,執行效率區別

使用這兩個不同的提供程序數據訪問效率有什么區別呢?經過測試,它們之間僅有細微的差別,Npgsql略微勝出,下面是測試程序建立過程:

首先在SqlMap.config文件中建立一個PostgreSQL的數據訪問腳本:

  1. <Select CommandName="GetFundFeat" Method="" CommandType="Text" Description="獲取業績" ResultClass="DataSet"> 
  2. <![CDATA[SELECT * FROM GetFundTrend_FundAnalysis_FundFeat (#currentJJDM:String#,#OtherJJDM:String#)]]> 
  3. </Select> 

然后使用集成開發工具的代碼生成器生成一個類中下面的方法:

  1. public DataSet GetFundFeat(String currentJJDM  , String OtherJJDM   )   
  2.     {   
  3.             //獲取命令信息  
  4.             CommandInfo cmdInfo=Mapper.GetCommandInfo("GetFundFeat");  
  5.             //參數賦值,推薦使用該種方式;  
  6.             cmdInfo.DataParameters[0].Value = currentJJDM;  
  7.             cmdInfo.DataParameters[1].Value = OtherJJDM;  
  8.             //參數賦值,使用命名方式;  
  9.             //cmdInfo.SetParameterValue("@currentJJDM", currentJJDM);  
  10.             //cmdInfo.SetParameterValue("@OtherJJDM", OtherJJDM);  
  11.             //執行查詢  
  12.             return CurrentDataBase.ExecuteDataSet(CurrentDataBase.ConnectionString, cmdInfo.CommandType, cmdInfo.CommandText , cmdInfo.DataParameters);  
  13.         //  
  14.     }//End Function  

***以不同的Pgsql驅動程序運行程序,查看執行的SQL日志:

使用dotConnect訪問:

  1. //2011/5/30 16:52:44 @AdoHelper 執行命令:  
  2. SQL="SELECT * FROM GetFundTrend_FundAnalysis_FundFeat (:currentJJDM,:OtherJJDM)" 
  3. //命令類型:Text  
  4. //2個命令參數:  
  5. Parameter["currentJJDM"]    =    "KF0355"              //DbType=AnsiString  
  6. Parameter["OtherJJDM"]    =    "000001,399001,H11020,000300"              //DbType=AnsiString  
  7. //2011/5/30 16:52:44 @AdoHelper :Execueted Time(ms):448  

使用Npgsql訪問:

  1. //2011/5/30 16:58:17 @AdoHelper 執行命令:  
  2. SQL="SELECT * FROM GetFundTrend_FundAnalysis_FundFeat (@currentJJDM,@OtherJJDM)" 
  3. //命令類型:Text  
  4. //2個命令參數:  
  5. Parameter["@currentJJDM"]    =    "KF0180"              //DbType=String  
  6. Parameter["@OtherJJDM"]    =    "000001,399001,H11020,000300"              //DbType=String  
  7. //2011/5/30 16:58:17 @AdoHelper :Execueted Time(ms):405  

原文鏈接:http://www.cnblogs.com/bluedoctor/archive/2011/05/30/2063494.html

 

【編者推薦】

  1. .net訪問PostgreSQL數據庫發生“找不到函數名”的問題追蹤
  2. PostgreSQL的.NET驅動程序Npgsql中參數對象的一個Bug
  3. PDF.NET數據開發框架實體類操作實例之在PostgreSQL中操作
  4. PostgreSQL數據庫管理入門之psql工具篇
責任編輯:艾婧 來源: 博客園
相關推薦

2011-05-19 15:14:49

PostgreSQL

2011-04-26 15:26:38

PostgreSQL

2009-07-06 18:17:46

JDBC驅動程序

2013-10-31 16:29:10

Linux內核

2011-01-06 16:29:08

linuxtasklet機制

2021-11-29 07:55:45

Linux GPIO Linux 系統

2017-03-03 08:40:32

2011-01-10 18:21:38

linux編寫程序

2009-08-12 18:20:39

C#事件驅動程序

2010-01-07 13:27:22

Linux驅動程序

2018-11-19 10:15:26

Windows 10WiFi驅動程序

2009-07-20 18:01:38

Oracle JDBC

2011-04-26 14:21:50

MySQL

2021-12-06 07:47:36

Linux 驅動程序Linux 系統

2019-10-22 15:40:34

Windows 10驅動程序Windows

2009-12-07 09:39:04

Linux設備驅動硬件通信

2009-09-04 10:10:33

Visual Basi

2022-03-08 09:25:52

數據庫系統MongoDB

2009-06-15 14:18:00

netbeans配置JDBC驅動程序

2010-05-10 15:53:24

Unix系統
點贊
收藏

51CTO技術棧公眾號

91久久国产综合久久蜜月精品| 久久久国产视频91| 日本xxxxxxx免费视频| 国产青青草在线| 国内精品不卡在线| 午夜精品免费视频| 少妇一级黄色片| 亚洲va欧美va人人爽成人影院| 欧美日韩在线另类| 中文字幕综合在线观看| 可以免费看毛片的网站| 日韩成人免费电影| 欧美高清视频在线| 极品人妻videosss人妻| 91精品国产自产在线丝袜啪| 色视频成人在线观看免| 欧美另类videosbestsex日本| 亚州精品国产精品乱码不99按摩| 麻豆视频一区二区| 51久久精品夜色国产麻豆| 人人干在线观看| 西瓜成人精品人成网站| 91精品国产91热久久久做人人| 国产黄视频在线| 主播国产精品| 国产精品拍天天在线| 久久精品日韩精品| 一区二区动漫| 国产一区美女在线| 久久成人在线视频| 91中文字幕永久在线| 久久伊人影院| 欧美日韩视频第一区| 欧美成人三级在线视频| 韩国中文字幕在线| 欧美国产日韩在线观看| 九色91国产| 成人免费视频国产免费麻豆| 国内成人免费视频| 国产精品私拍pans大尺度在线| 日产精品久久久| 欧美特黄a级高清免费大片a级| 北条麻妃一区二区三区中文字幕 | 日韩精品国内| 视频午夜在线| 91色porny蝌蚪| 国产日韩一区欧美| 成人午夜视频一区二区播放| 国产一区二区91| 91亚洲人电影| 国产特级aaaaaa大片| 久久99久久精品| 91精品国产综合久久男男| 最近中文字幕在线视频| 三级影片在线观看欧美日韩一区二区| 2019最新中文字幕| 97免费在线观看视频| 亚洲日韩视频| 97视频在线观看免费高清完整版在线观看 | 成人av在线播放| 91精品婷婷国产综合久久| 九九热精品在线播放| 久久精品国产福利| 欧美日本一道本在线视频| 五月激情五月婷婷| 精品一区二区三区四区五区| 欧美一区永久视频免费观看| 无套内谢丰满少妇中文字幕| 亚洲精品一区二区三区在线| 精品国产自在久精品国产| 制服丝袜在线第一页| 久久悠悠精品综合网| 精品爽片免费看久久| av电影网站在线观看| 日韩欧美精品| 久久国产天堂福利天堂| 黄色一级免费视频| 亚洲国产国产亚洲一二三| 青青草原一区二区| 91麻豆精品在线| 激情久久五月天| 国产传媒一区二区| 天天在线女人的天堂视频| 久久丝袜美腿综合| 一区二区三区四区国产| 色噜噜狠狠狠综合欧洲色8| 精品国产老师黑色丝袜高跟鞋| 国产熟女高潮视频| 78精品国产综合久久香蕉| 717成人午夜免费福利电影| 久久久久久无码精品人妻一区二区| 嗯用力啊快一点好舒服小柔久久| 日韩av中文字幕在线| 亚洲天堂最新地址| 一区免费在线| 国产精品观看在线亚洲人成网| 99国产揄拍国产精品| 91在线你懂得| 咪咪色在线视频| 日韩激情电影免费看| 欧美日韩国产三级| 麻豆精品国产传媒av| 日韩精品久久| 午夜精品理论片| 伊人免费在线观看| 成人免费观看男女羞羞视频| 日韩和欧美的一区二区| 欧美xxx黑人xxx水蜜桃| 91国产丝袜在线播放| 丰满人妻一区二区三区大胸| 精品72久久久久中文字幕| 久久精品这里热有精品| 日本中文在线播放| 国产乱妇无码大片在线观看| 欧美动漫一区二区| 亚洲区欧洲区| 欧美三级电影在线观看| 中文在线永久免费观看| 亚洲欧洲美洲一区二区三区| 国产成人精品免高潮在线观看 | 午夜无码国产理论在线| 日韩欧美国产wwwww| 一级片久久久久| 99在线精品视频在线观看| 成人伊人精品色xxxx视频| 青青草在线免费视频| 亚洲一区二区三区影院| 亚洲一区二区三区观看| 国产亚洲欧美日韩在线观看一区二区| 欧美高清在线播放| 一级黄色片在线看| 国产亲近乱来精品视频| 国产精品50p| 国产成人tv| 欧美第一黄色网| 91麻豆国产在线| 日本一区免费视频| 精品久久久久av| 神马日本精品| 91国语精品自产拍在线观看性色 | 麻豆视频久久| 日韩在线一区二区三区免费视频| 精品不卡一区二区| av欧美精品.com| 韩国无码av片在线观看网站| 国产精品视频首页| 久久久精品亚洲| 夜夜爽8888| 最近中文字幕一区二区三区| 男人添女人下面免费视频| 久久99精品久久久久久园产越南| 2019中文字幕在线| 色天堂在线视频| 日韩欧美一区视频| 色哟哟精品观看| 日韩国产在线一| 污视频在线免费观看一区二区三区 | 日本高清免费在线视频| 888久久久| 3d动漫精品啪啪一区二区三区免费| 国产黄大片在线观看画质优化| 欧美另类高清zo欧美| frxxee中国xxx麻豆hd| 韩国av一区二区| 天天操天天干天天玩| 最新国产精品精品视频| 欧美激情网站在线观看| 少妇高潮一区二区三区99小说| 天天爽夜夜爽夜夜爽精品视频| 亚洲国产第一区| 视频一区中文字幕| 中文精品一区二区三区| 日韩精品亚洲专区在线观看| 久久久久久中文| 四虎精品成人免费网站| 欧美日韩色婷婷| 免费一级做a爰片久久毛片潮| 日本怡春院一区二区| 伊人久久大香线蕉av一区| 另类视频一区二区三区| 97在线精品国自产拍中文| 国产一区二区三区福利| 正在播放一区二区| 国产一级做a爱免费视频| 91老司机福利 在线| 色多多视频在线播放| 欧美激情亚洲| 欧美国产一区二区在线| 国产高清精品二区| 91成人天堂久久成人| 午夜在线视频| 亚洲第一av网站| 欧美日韩在线视频播放| 一区二区三区丝袜| 微拍福利一区二区| 国产精品一区二区男女羞羞无遮挡| 国产特级淫片高清视频| 成人在线电影在线观看视频| 高清一区二区三区视频| 香蕉成人影院| 久久久久久久久久久久av| 国产系列在线观看| 日韩一区二区免费在线观看| 91视频在线视频| 亚洲一区自拍偷拍| youjizz亚洲女人| jlzzjlzz国产精品久久| 亚洲美女性囗交| 国产精品丝袜xxxxxxx| 一级性生活视频| 国产影视一区| 国产一区在线免费观看| 亚洲三级在线| 国产精品白嫩初高中害羞小美女 | 亚洲黄色免费网站| 丰满亚洲少妇av| 欧美国产欧美亚州国产日韩mv天天看完整| 精品久久中文字幕久久av| 亚洲а∨天堂久久精品9966| 久久久久久这里只有精品| 国产精品推荐精品| 久久久噜噜噜www成人网| 中文字幕avav| 女尊高h男高潮呻吟| 日本一区二区乱| 国产成人午夜视频网址| 国产羞羞视频在线播放| 色综久久综合桃花网| 欧美色18zzzzxxxxx| 日韩精品一区二区在线| 91久久精品国产91性色69 | 亚洲激情小视频| 精品国产无码AV| 欧美丰满美乳xxx高潮www| 波多野结衣午夜| 欧美性极品少妇精品网站| 国产在线一二区| 亚洲老妇xxxxxx| 亚洲一级二级片| 国产精品久久久久三级| 性の欲びの女javhd| 久久久久久麻豆| 37p粉嫩大胆色噜噜噜| 不卡欧美aaaaa| 天天躁日日躁狠狠躁免费麻豆| 国产精品456| xxxx国产视频| 国产91在线|亚洲| 国产精品果冻传媒| 国产传媒日韩欧美成人| 亚洲成a人片在线www| 国产精品69毛片高清亚洲| 日本女人黄色片| 国产成人av福利| 特级特黄刘亦菲aaa级| 成人国产精品免费观看| 国产黑丝在线观看| 北条麻妃一区二区三区| 中国极品少妇videossexhd| 波多野洁衣一区| 可以直接看的无码av| 久久色在线视频| 精品人妻一区二区三区蜜桃视频| 国产精品欧美一区二区三区| 日韩一区二区三区四区视频| 亚洲欧美日韩在线不卡| 青青操国产视频| 精品久久久久久久久久久| 亚洲日本韩国在线| 91久久精品日日躁夜夜躁欧美| 日本妇乱大交xxxxx| 欧美福利视频一区| www.天堂在线| 日韩电影视频免费| 国产精品久久久久一区二区国产| 宅男66日本亚洲欧美视频| 麻豆av免费在线观看| 欧美激情国产日韩精品一区18| 999福利在线视频| 日韩免费在线播放| 91精品国产一区二区在线观看| 91av免费看| 丝袜连裤袜欧美激情日韩| 亚洲精品一区二区毛豆| 欧美激情无毛| 欧美精品第三页| 国产一区二区三区四| 亚洲性图第一页| 久久精品一区八戒影视| 三级影片在线看| 欧美视频精品一区| 国产精品欧美亚洲| 亚洲精品久久久一区二区三区| 成人免费在线观看| 欧美黑人一级爽快片淫片高清| 丁香六月综合| 亚洲jizzjizz日本少妇| 美女久久久久| 国产 欧美 日本| 日韩精品一区第一页| 女女调教被c哭捆绑喷水百合| 久久综合精品国产一区二区三区 | 日本道中文字幕| 国产精品另类一区| 天堂网一区二区三区| 欧美一级片免费看| 国产大学生校花援交在线播放| 欧美黄网免费在线观看| 色综合天天色| 久久精品国产第一区二区三区最新章节 | 亚洲日韩第一页| 视频在线这里都是精品| 国产精品久久久久久久久久| 女同一区二区三区| 欧美大片免费播放| 日本欧美久久久久免费播放网| 亚洲v在线观看| 18涩涩午夜精品.www| 国产视频1区2区| 亚洲国产精品一区二区三区| 91高清在线观看视频| 国产精品视频在线观看| 亚洲精华一区二区三区| 国产青草视频在线观看| 九九精品视频在线看| 五月婷六月丁香| 日韩欧美国产视频| 手机看片1024国产| 欧美国产日韩xxxxx| 成人在线视频国产| 日韩影片在线播放| 久久一区中文字幕| 欧美无人区码suv| 亚洲成人激情综合网| 亚洲精品国产手机| 久久97精品久久久久久久不卡| 成人乱码手机视频| 一区二区视频国产| 麻豆精品在线看| www.日本高清视频| 在线观看中文字幕不卡| 蜜芽tv福利在线视频| 26uuu另类亚洲欧美日本老年| 欧美人成在线观看ccc36| 每日在线观看av| 播五月开心婷婷综合| 国产在线精品观看| 精品粉嫩超白一线天av| av免费在线视| 麻豆传媒一区二区| 久久久精品午夜少妇| 97人妻人人揉人人躁人人| 欧美亚洲国产一区二区三区va | 中文字幕国产一区| 中文字幕在线观看高清| 日韩中文理论片| 精品一区91| 给我免费播放片在线观看| 91在线视频观看| 国产乱码77777777| 自拍偷拍亚洲欧美| 国产高清日韩| 韩日视频在线观看| 久久亚洲精精品中文字幕早川悠里| 在线观看亚洲欧美| 亚洲最新中文字幕| 亚洲国产天堂| 久草视频这里只有精品| 99热99精品| 中文字幕在线2018| 欧美日韩不卡合集视频| 农村少妇一区二区三区四区五区 | 亚洲天堂免费观看| 成人午夜毛片| 一二三在线视频| 26uuu国产电影一区二区| 欧美 亚洲 另类 激情 另类 | 97超碰在线免费| 日本精品免费| 韩国精品一区二区| 97超碰人人干| 色综久久综合桃花网| caoporn成人| 狠狠热免费视频| 一区二区理论电影在线观看| 日本福利在线观看| 成人精品网站在线观看| 一级成人国产| 色哟哟一一国产精品| 亚洲黄色在线看| 巨大黑人极品videos精品| 日韩一区二区高清视频| 久久久亚洲午夜电影| 99视频在线观看免费| 欧美在线一区二区三区四| 亚洲久久久久| 久久美女免费视频| 日韩一区二区三区免费看 | 亚洲欧美日韩国产一区二区| 最新黄色av网址|