欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

對數據訪問層第一種實現(Acc SQL)的重構_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:asp.net基礎知識介紹
在這個專題里我們將介紹asp.net,Asp.net又叫asp ,他不是asp的簡單升級,而是microsoft推出的新一代Active Server Pages。ASP.net是微軟發展的新的體系結.NET的一部分,其中全新的技術架構會讓

昨天的文章基于.NET平臺的分層架構實戰(七)——數據訪問層的第一種實現:Access SQL發布后,很多朋友對我的程序提出了意見和建議,在這里先謝謝你們!!!尤其是 金色海洋(jyk),對我的程序提出了很多建設性的意見。

我大體總結了一下,昨天程序的主要缺點有:
1.Connection對象沒有關閉
2.DataReader對象沒有關閉
3.相似代碼太多,造成代碼冗余。

其中第一點問題,目前還沒有太好的解決方案,主要是因為Connection一旦關閉,DataReader就無法讀取了。而且,Connection對象應該會自動在適當的時候關閉(通過觀察臨時文件得出),并且在實際運行時并無影響(在功能上),所以這里沒有專門解決。而針對后面兩個問題,我使用了如下解決方案。

對于關閉DataReader的方法,實現起來很簡單,在finally里將他關閉就行了。關鍵是如何去處冗余代碼。

經過我的分析,數據訪問層的操作可以分為三類:不返回數據,返回單個實體類,返回實體類集合。我將這三種操作的公共部分抽出,寫成三個方法放在AccessDALHelper里,類型不同的問題使用泛型解決。

這樣做有一個難題,就是不同實體在由DataReader轉化為實體類時的代碼很不一樣,無法抽出。這里,我使用了Strategy模式解決。具體做法是:首先定義一個由DataReader轉換為實體類的策略接口,然后為不同的實體編寫不同的轉換策略,示意圖如下:

可以看出,所有轉換策略都要實現IDataReaderToEntityStrategy接口,并且每個策略都有一個自組合,這是以為他們都要實現Singleton模式。而AccessDALHelper與具體策略無關,僅與接口耦合。

下面來看一下具體代碼:

首先是IDataReaderToEntityStrategy接口


然后以Admin為例,看一下策略的具體實現:

1using System;
2using System.Collections.Generic;
3using System.Web;
4using System.Web.Caching;
5using System.Configuration;
6using System.Data;
7using System.Data.OleDb;
8using NGuestBook.Utility;
9
10namespace NGuestBook.AccessDAL
11{
12 /// <summary>
13 /// Access數據庫操作助手
14 /// </summary>

15 public sealed class AccessDALHelper
16 {
17 /// <summary>
18 /// 讀取Access數據庫的連接字符串
19 /// 首先從緩存里讀取,如果不存在則到配置文件中讀取,并放入緩存
20 /// </summary>
21 /// <returns>Access數據庫的連接字符串</returns>

22 private static string GetConnectionString()
23 {
24 if (CacheAccess.GetFromCache("AccessConnectionString") != null)
25 {
26 return CacheAccess.GetFromCache("AccessConnectionString").ToString();
27 }

28 else
29 {
30 string dbPath = ConfigurationManager.AppSettings["AccessPath"];
31 string dbAbsolutePath = HttpContext.Current.Server.MapPath(dbPath);
32 string connectionString = ConfigurationManager.AppSettings["AccessConnectionString"];
33
34 CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
35 CacheAccess.SaveToCache("AccessConnectionString", connectionString.Replace("{DBPath}", dbAbsolutePath), fileDependency);
36
37 return connectionString.Replace("{DBPath}", dbAbsolutePath);
38 }

39 }

40
41 /// <summary>
42 /// 執行SQL語句并且不返回任何值
43 /// </summary>
44 /// <param name="SQLCommand">所執行的SQL命令</param>
45 /// <param name="parameters">參數集合</param>

46 public static void ExecuteSQLNonQuery(string SQLCommand, OleDbParameter[] parameters)
47 {
48 OleDbConnection connection = new OleDbConnection(GetConnectionString());
49 OleDbCommand command = new OleDbCommand(SQLCommand, connection);
50
51 for (int i = 0; i < parameters.Length; i )
52 {
53 command.Parameters.Add(parameters[i]);
54 }

55
56 connection.Open();
57 command.ExecuteNonQuery();
58 connection.Close();
59 }

60
61 /// <summary>
62 /// 執行SQL語句并返回包含查詢結果的DataReader
63 /// </summary>
64 /// <param name="SQLCommand">所執行的SQL命令</param>
65 /// <param name="parameters">參數集合</param>
66 /// <returns></returns>

67 public static OleDbDataReader ExecuteSQLDataReader(string SQLCommand, OleDbParameter[] parameters)
68 {
69 OleDbConnection connection = new OleDbConnection(GetConnectionString());
70 OleDbCommand command = new OleDbCommand(SQLCommand, connection);
71
72 for (int i = 0; i < parameters.Length; i )
73 {
74 command.Parameters.Add(parameters[i]);
75 }

76
77 connection.Open();
78 OleDbDataReader dataReader = command.ExecuteReader();
79 //connection.Close();
80
81 return dataReader;
82 }

83
84 /// <summary>
85 /// 執行不需要返回數據的操作
86 /// </summary>
87 /// <param name="SQLCommand">SQL命令</param>
88 /// <param name="parameters">參數</param>
89 /// <returns>是否成功</returns>

90 public static bool OperateNonData(string SQLCommand, OleDbParameter[] parameters)
91 {
92 try
93 {
94 ExecuteSQLNonQuery(SQLCommand, parameters);
95 return true;
96 }

97 catch
98 {
99 return false;
100 }

101 }

102
103 /// <summary>
104 /// 執行返回單個實體類的操作
105 /// </summary>
106 /// <typeparam name="T">實體類類型</typeparam>
107 /// <param name="SQLCommand">SQL命令</param>
108 /// <param name="parameters">參數</param>
109 /// <param name="strategy">DataReader到實體類的轉換策略</param>
110 /// <returns>實體類</returns>

111 public static T OperateEntity<T>(string SQLCommand, OleDbParameter[] parameters, IDataReaderToEntityStrategy<T> strategy)
112 {
113 OleDbDataReader dataReader = ExecuteSQLDataReader(SQLCommand, parameters);
114 try
115 {
116 if (!dataReader.HasRows)
117 {
118 throw new Exception();
119 }

120
121 dataReader.Read();
122 return strategy.DataReaderToEntity(dataReader);
123 }

124 catch
125 {
126 return default(T);
127 }

128 finally
129 {
130 dataReader.Close();
131 }

132 }

133
134 /// <summary>
135 /// 執行返回實體類集合的操作
136 /// </summary>
137 /// <typeparam name="T">實體類類型</typeparam>
138 /// <param name="SQLCommand">SQL命令</param>
139 /// <param name="parameters">參數</param>
140 /// <param name="strategy">DataReader到實體類的轉換策略</param>
141 /// <returns>實體類</returns>

142 public static IList<T> OperateEntityCollection<T>(string SQLCommand, OleDbParameter[] parameters, IDataReaderToEntityStrategy<T> strategy)
143 {
144 OleDbDataReader dataReader = AccessDALHelper.ExecuteSQLDataReader(SQLCommand, null);
145 try
146 {
147 if (!dataReader.HasRows)
148 {
149 throw new Exception();
150 }

151
152 IList<T> entityCollection = new List<T>();
153 int i = 0;
154 while (dataReader.Read())
155 {
156 entityCollection.Add(strategy.DataReaderToEntity(dataReader));
157 i ;
158 }

159
160 return entityCollection;
161 }

162 catch
163 {
164 return default(IList<T>);
165 }

166 finally
167 {
168 dataReader.Close();
169 }

170 }

171 }

172}

最后以Admin為例,看一下簡化后的數據訪問層實現:

1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Data;
5using System.Data.OleDb;
6using NGuestBook.IDAL;
7using NGuestBook.Entity;
8
9namespace NGuestBook.AccessDAL
10{
11 public class AdminDAL : IAdminDAL
12 {
13 /// <summary>
14 /// 插入管理員
15 /// </summary>
16 /// <param name="admin">管理員實體類</param>
17 /// <returns>是否成功</returns>

18 public bool Insert(AdminInfo admin)
19 {
20 string SQLCommand = "insert into [TAdmin]([Name],[Password]) values(@name,@password)";
21 OleDbParameter[] parameters ={
22 new OleDbParameter("name",OleDbType.VarChar,20),
23 new OleDbParameter("password",OleDbType.VarChar,50)
24 }
;
25 parameters[0].Value = admin.Name;
26 parameters[1].Value = admin.Password;
27
28 return AccessDALHelper.OperateNonData(SQLCommand, parameters);
29 }

30
31 /// <summary>
32 /// 刪除管理員
33 /// </summary>
34 /// <param name="id">欲刪除的管理員的ID</param>
35 /// <returns>是否成功</returns>

36 public bool Delete(int id)
37 {
38 string SQLCommand = "delete from [TAdmin] where [ID]=@id";
39 OleDbParameter[] parameters ={
40 new OleDbParameter("id",OleDbType.Integer)
41 }
;
42 parameters[0].Value = id;
43
44 return AccessDALHelper.OperateNonData(SQLCommand, parameters);
45 }

46
47 /// <summary>
48 /// 更新管理員信息
49 /// </summary>
50 /// <param name="admin">管理員實體類</param>
51 /// <returns>是否成功</returns>

52 public bool Update(AdminInfo admin)
53 {
54 string SQLCommand = "update [TAdmin] set [Name]=@name,[Password]=@password where [ID]=@id";
55 OleDbParameter[] parameters ={
56 new OleDbParameter("id",OleDbType.Integer),
57 new OleDbParameter("name",OleDbType.VarChar,20),
58 new OleDbParameter("password",OleDbType.VarChar,50)
59 }
;
60 parameters[0].Value = admin.ID;
61 parameters[1].Value = admin.Name;
62 parameters[2].Value = admin.Password;
63
64 return AccessDALHelper.OperateNonData(SQLCommand, parameters);
65 }

66
67 /// <summary>
68 /// 按ID取得管理員信息
69 /// </summary>
70 /// <param name="id">管理員ID</param>
71 /// <returns>管理員實體類</returns>

72 public AdminInfo GetByID(int id)
73 {
74 string SQLCommand = "select * from [TAdmin] where [ID]=@id";
75 OleDbParameter[] parameters ={
76 new OleDbParameter("id",OleDbType.Integer)
77 }
;
78 parameters[0].Value = id;
79
80 return AccessDALHelper.OperateEntity<AdminInfo>(SQLCommand, parameters, AdminDataReaderToEntityStrategy.GetInstance());
81 }

82
83 /// <summary>
84 /// 按用戶名及密碼取得管理員信息
85 /// </summary>
86 /// <param name="name">用戶名</param>
87 /// <param name="password">密碼</param>
88 /// <returns>管理員實體類,不存在時返回null</returns>

89 public AdminInfo GetByNameAndPassword(string name, string password)
90 {
91 string SQLCommand = "select * from [TAdmin] where [Name]=@name and [Password]=@password";
92 OleDbParameter[] parameters ={
93 new OleDbParameter("name",OleDbType.VarChar,20),
94 new OleDbParameter("password",OleDbType.VarChar,50)
95 }
;
96 parameters[0].Value = name;
97 parameters[1].Value = password;
98
99 return AccessDALHelper.OperateEntity<AdminInfo>(SQLCommand, parameters, AdminDataReaderToEntityStrategy.GetInstance());
100 }

101
102 /// <summary>
103 /// 按管理員名取得管理員信息
104 /// </summary>
105 /// <param name="name">管理員名</param>
106 /// <returns>管理員實體類</returns>

107 public AdminInfo GetByName(string name)
108 {
109 string SQLCommand = "select * from [TAdmin] where [Name]=@name";
110 OleDbParameter[] parameters ={
111 new OleDbParameter("name",OleDbType.VarChar,20)
112 }
;
113 parameters[0].Value = name;
114
115 return AccessDALHelper.OperateEntity<AdminInfo>(SQLCommand, parameters, AdminDataReaderToEntityStrategy.GetInstance());
116 }

117
118 /// <summary>
119 /// 取得全部管理員信息
120 /// </summary>
121 /// <returns>管理員實體類集合</returns>

122 public IList<AdminInfo> GetAll()
123 {
124 string SQLCommand = "select * from [TAdmin]";
125
126 return AccessDALHelper.OperateEntityCollection<AdminInfo>(SQLCommand, null, AdminDataReaderToEntityStrategy.GetInstance());
127 }

128 }

129}

分享:ASP.NET中的狀態管理
我們在ASP中能夠通過cookie、查詢字符串、應用程序、對話等輕易地解決這些問題。現在到了ASP.NET環境中,我們仍然可以使用這些功能,只是它們的種類更多了,功能也更強大了。   管理互聯網

來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
相關.Net教程
91在线在线观看| 综合分类小说区另类春色亚洲小说欧美 | 国内自拍欧美激情| 青青视频在线播放| 欧美性受xxx黑人xyx性爽| 日韩理论电影院| 一区二区成人在线视频| 午夜欧美大片免费观看| 美女网站免费观看视频| 国产精品老熟女视频一区二区| 综合亚洲视频| 日韩欧美亚洲综合| 成人国产在线视频| 亚洲第一黄色网址| 色综合视频一区二区三区日韩| 国产91富婆露脸刺激对白 | 亚洲欧美综合另类| 久久蜜桃av| 亚洲成av人在线观看| 日韩久久精品| 国内精品久久久久影院薰衣草| 欧美变态tickle挠乳网站| 免费日韩电影在线观看| 亚洲一二三在线观看| 亚洲bt欧美bt精品777| 亚洲欧洲精品天堂一级| 欧美一级视频免费在线观看| 日韩av片专区| 色呦呦中文字幕| 国产真实乱偷精品视频免| 亚洲精品aⅴ中文字幕乱码 | 国产精品黑丝在线播放 | 在线免费观看日韩av| 欧美黄视频在线观看| 国产亚洲人成网站| 国内精品一区二区三区四区| 午夜免费看毛片| 日本成人三级电影| 99九九99九九九视频精品| 日韩在线观看成人| 粉嫩虎白女毛片人体| 欧美一区二区三区激情| 国产一区二区成人久久免费影院| 亚洲午夜久久久久久久| 青青草原成人网| 国 产 黄 色 大 片| 国产精选一区二区三区| 色妞久久福利网| 超碰影院在线观看| 亚洲欧美小说色综合小说一区| 国产精品一二三四| 美女啪啪无遮挡免费久久网站| 中文字幕在线导航| 456成人影院在线观看| 91丨porny丨在线| 欧美人在线视频| 色哟哟在线观看视频| 伊人久久大香| 日韩一区中文字幕| 91精品久久久久久久久久| 久久婷婷五月综合| 精品美女视频| 欧美色综合影院| 亚洲精品成人久久久998| 三级网站在线播放| 日日摸夜夜添夜夜添国产精品| 国产午夜精品理论片a级探花| 欧美男女爱爱视频| 天天干天天色天天| 91免费精品国自产拍在线不卡| 91精品国产精品| 荫蒂被男人添免费视频| 欧美人妖在线观看| 日韩欧美亚洲一二三区| 日韩精品欧美一区二区三区| 在线视频精品免费| 激情丁香综合五月| 欧美激情一二三| 中文字幕无码人妻少妇免费| 国偷自产av一区二区三区| 午夜成人免费视频| 欧美一区免费视频| 伊人久久亚洲综合| 韩国av一区二区| 欧美激情第6页| 精品中文字幕在线播放| 日韩中文av| 欧美三级电影在线观看| 老汉色影院首页| 精品毛片在线观看| xnxx国产精品| 国产一区红桃视频| www.av视频在线观看| 亚洲欧美激情诱惑| 在线亚洲午夜片av大片| 韩国中文字幕av| 日韩第一区第二区| 一本到三区不卡视频| 在线亚洲美日韩| 亚洲精品字幕在线观看| 亚洲国产成人在线| 国产99午夜精品一区二区三区| 亚洲免费在线观看av| 老司机午夜精品99久久| 久久久久久久久久亚洲| 性猛交娇小69hd| 女人色偷偷aa久久天堂| 亚洲精品天天看| 制服下的诱惑暮生| 精品久久视频| 亚洲国产精品女人久久久| 亚洲最大综合网| 好吊妞国产欧美日韩免费观看网站| 色94色欧美sute亚洲线路一久| 最新中文字幕久久| 亚洲成人不卡| 亚洲大片在线观看| 中文字幕久久综合| 99久久亚洲国产日韩美女 | 91久久综合亚洲鲁鲁五月天| 久久久久久激情| 美女视频黄 久久| 97超碰国产精品女人人人爽| 伊人久久久久久久久久久久久久| 宅男噜噜噜66一区二区| 萌白酱国产一区二区| 美女100%无挡| 亚洲美女91| 欧美伦理91i| 国产精品69久久久久孕妇欧美| 亚洲精品少妇| 欧美高清激情视频| 羞羞在线观看视频| 男人的天堂亚洲一区| 国产91ⅴ在线精品免费观看| 精品国产欧美日韩不卡在线观看| 日本美女一区二区| 青青a在线精品免费观看| 久久久久亚洲av片无码下载蜜桃 | 成人免费视频免费观看| 成人国产精品一区| 一区二区视频免费| 久久精品在这里| 精品一区二区国产| 国产精品久久在线观看| 日日噜噜噜噜人人爽亚洲精品| 粉嫩绯色av一区二区在线观看| 成人激情视频小说免费下载| 中文在线资源天堂| 国产免费观看久久| 日本电影一区二区三区| 三上悠亚一区二区| 色综合视频在线观看| 欧洲黄色一级视频| 亚洲v天堂v手机在线| 日韩av在线一区| 黄色在线免费播放| 国产日韩精品视频一区二区三区 | 日韩毛片在线播放| 本田岬高潮一区二区三区| 9a蜜桃久久久久久免费| 亚洲精品第五页| 亚洲国产毛片aaaaa无费看| 国产综合中文字幕| 国产区精品区| 一区二区三区精品99久久| 久久久久无码精品国产sm果冻 | 视频在线日韩| 在线视频欧美区| 日本人69视频| 影音先锋日韩在线| 久久久久久久999| 久久狠狠高潮亚洲精品| 久久免费精品国产久精品久久久久| 久久久水蜜桃| 97久久网站| 欧美精品一级二级| 久久久久亚洲av无码麻豆| 国产在线不卡| 4444欧美成人kkkk| 亚洲午夜在线播放| 亚洲精品国产无套在线观| www精品久久| 免费视频一区三区| 久久精品视频免费播放| 久草视频手机在线观看| 99re成人在线| 五月天久久狠狠| 日本久久伊人| 精品一区精品二区| 久久精品在线观看视频| 成人免费观看视频| 欧美性xxxx69| 亚洲1区在线| 国产视频综合在线| 男人在线观看视频| 99久久亚洲一区二区三区青草| 欧美一区视久久| 日韩精品一区二区三区中文字幕| 亚洲韩国日本中文字幕| 91ts人妖另类精品系列| 不卡的av中国片| 亚洲v国产v在线观看| jazzjazz国产精品久久| 一个色综合导航| 免费无码毛片一区二区app| 久久九九99视频| www.男人天堂网| 国产午夜一区| 久久久久久这里只有精品| 丰满人妻一区二区三区四区| 亚洲国产综合色| 无尽裸体动漫2d在线观看| 一本色道精品久久一区二区三区| 国产女人精品视频| 午夜福利一区二区三区| 欧美一区二区三区公司| 熟女高潮一区二区三区| 成人免费视频caoporn| 亚洲欧美日韩不卡一区二区三区| 国产精品x8x8一区二区| 久久精品国产亚洲精品2020| 国产婷婷色一区二区在线观看| 一区二区三区精品在线| 冲田杏梨av在线| 国产日韩亚洲| 国产精品国产精品国产专区蜜臀ah | 国产精品久久9| 十八禁一区二区三区| 日韩午夜激情av| 亚洲怡红院在线观看| 欧美国产精品一区| 欧美黄网站在线观看| 亚洲黄色av| 亚洲最大成人免费视频| 伊人亚洲精品| 中文字幕日韩高清| 波多野结衣电车| 欧美日韩性视频在线| 特黄特色免费视频| 国产精品综合网| 糖心vlog在线免费观看| 国产二区精品| 国产日韩专区在线| 亚洲免费资源| 久久精品国产成人精品| 中文字幕av免费观看| 欧美中文字幕不卡| 日本xxxxxxxxx18| 久久久www成人免费毛片麻豆| 国模无码视频一区二区三区| 99精品国产福利在线观看免费| αv一区二区三区| 豆花视频一区二区| 久久久噜噜噜久久久| 天堂av2024| 国产婷婷色综合av蜜臀av | 国产精品-色哟哟| 欧美日韩精品综合在线| 亚洲国产精品一区二区久久hs| 国产偷国产偷精品高清尤物| 日韩视频免费在线播放| 日产国产欧美视频一区精品| 五月天亚洲综合| 久久久久久美女精品| 91免费在线视频| 亚洲乱码一区| 97人人做人人爱| 蜜臀国产一区| 中文字幕在线观看亚洲| 一区二区国产欧美| 日韩欧美卡一卡二| 日韩三级视频在线播放| 色婷婷久久久久swag精品| 久久久久久久毛片| 中文字幕欧美一| 亚洲色图欧美另类| 26uuu亚洲综合色欧美| 国产一级不卡毛片| 国产综合久久久久影院| 黄色三级中文字幕| 久久久水蜜桃av免费网站| 日韩欧美精品久久| 一级欧洲+日本+国产| 国产精品一区二区免费| 伊人精品一区| 国产色视频一区| 懂色av一区二区| 国产成人精品一区| 日韩欧美中文在线观看| 97国产在线视频| 日韩精选视频| 欧美激情第6页| 影视一区二区三区| 久久69精品久久久久久久电影好| 十八禁一区二区三区| 日韩在线观看视频免费| 国精产品一品二品国精品69xx| 亚洲欧美中文字幕| 精品国产亚洲一区二区麻豆| 亚洲男人的天堂网站| h片在线免费看| 亚洲欧美激情四射在线日| 国产永久免费视频| 亚洲男人的天堂在线播放| 国产精品久久久久久免费播放| 日韩电影大全免费观看2023年上| 中文字幕人妻一区二区在线视频 | 色综合影院在线| 搡老岳熟女国产熟妇| 日韩一区二区三区国产| 亚洲人成色777777精品音频| 久久精品视频导航| 国产69精品久久久久按摩| 91精品国产网站| 国产精品亚洲综合在线观看| 欧美在线视频导航| 国产极品模特精品一二| 国产一区二区在线免费| 国产区精品区| 精品一区二区三区国产| 欧美色图首页| 中日韩在线视频| 日韩国产欧美在线播放| 亚洲 欧美 日韩 国产综合 在线| 国产尤物一区二区在线| 三级a在线观看| 久久午夜免费电影| 中国极品少妇videossexhd| 亚洲麻豆国产自偷在线| 1024在线看片| 欧美自拍偷拍午夜视频| 欧美性猛交bbbbb精品| 亚洲成人a**站| www.精品久久| 伦理中文字幕亚洲| 国产一区二区在线观| 国产精品亚洲综合天堂夜夜| 国产精品探花在线观看| 久久一区二区三区av| 伊人久久亚洲影院| 99久久久精品视频| 顶级嫩模精品视频在线看| 国产一级免费大片| 亚洲素人一区二区| 天天鲁一鲁摸一摸爽一爽| 欧美精品xxxxbbbb| 国产一区二区在线视频聊天| 北条麻妃99精品青青久久| 欧美成人毛片| 91九色视频导航| 91精品成人| 影音先锋男人的网站| 国产九色精品成人porny| 一区二区三区人妻| 夜色激情一区二区| 日本少妇做爰全过程毛片| 亚洲福利小视频| 午夜视频在线免费播放| 清纯唯美日韩制服另类| 久久av资源| 日韩一区免费观看| 久久99精品久久久| 欧美又黄又嫩大片a级| 亚洲精品一二三| 国产真实乱人偷精品视频| 亚洲国产三级网| 美女色狠狠久久| 国产原创欧美精品| 午夜亚洲福利| 九九爱精品视频| 国产亚洲欧美日韩日本| 99自拍偷拍视频| 欧美va日韩va| 裤袜国产欧美精品一区| 国产精品第2页| 一级毛片免费高清中文字幕久久网| 激情五月六月婷婷| 99久久亚洲一区二区三区青草| 91成年人网站| 宅男噜噜噜66一区二区66| 好吊视频一二三区| 国产成人精品一区二区三区| 国产二区精品| 成熟丰满熟妇高潮xxxxx视频| 久久精品亚洲精品国产欧美kt∨ | 亚洲美女在线观看| 日韩成人综合网| 国产精品久久久久久免费观看| 亚洲欧美日韩精品一区二区| 中文字幕 91| 精品日韩美女的视频高清| 中文字幕 国产精品| 欧美成人久久久| 亚洲精品白浆高清| 日韩不卡一二区| 久久亚洲欧美国产精品乐播| 蜜桃视频最新网址| 日韩精品在线看| 久久爱www.|