欧美三区四区_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教程
亚洲国产日日夜夜| 欧美久久一区| 欧美国产日韩a欧美在线观看 | 久久色中文字幕| 中文字幕免费国产精品| 一区二区三区精品国产| 小早川怜子一区二区的演员表| 日韩三级网址| 26uuu国产一区二区三区| 最好看的2019的中文字幕视频| 可以在线看黄的网站| 亚洲男人的天堂在线视频| 精品国产91久久久久久浪潮蜜月| 亚洲男人都懂的| 97婷婷大伊香蕉精品视频| 手机视频在线观看| 亚洲美女综合网| 免费高清在线视频一区·| 欧美变态tickle挠乳网站| 欧美一级二级三级| 极品盗摄国产盗摄合集| 国产不卡一二三区| 亚洲永久免费视频| 国产精品久久久久久久久久免费| 中文字幕第10页| 成人免费福利| 成人小视频免费观看| 中文字幕久久亚洲| 欧美a在线视频| 精品人妻无码一区二区三区蜜桃一| 香蕉久久a毛片| 欧美大片一区二区| 亚州欧美一区三区三区在线 | 国产精品欧美久久久久天天影视| 午夜亚洲一区| 日韩精品一区二区三区视频| 亚洲欧美久久久久一区二区三区| 亚洲精品国产精品乱码| 亚洲精品午夜av福利久久蜜桃| 91久久精品一区二区| 国产伦精品一区二区三区四区视频 | 日韩亚洲在线视频| 无码国产精品一区二区免费16| 国产精品一区三区| 久久伊人精品天天| 啊啊啊国产视频| 伊人久久高清| 久久久国际精品| 26uuu亚洲国产精品| 国产成人av片| 日韩精品久久久久久久软件91| 国产精品三级电影| 国产精品高潮在线| 亚洲性猛交xxxx乱大交| 亚洲动漫在线观看| 狠狠久久亚洲欧美专区| 精品国产乱码久久久久久88av| 国产大片中文字幕| 影音先锋国产精品| 日韩禁在线播放| 久久久999视频| 周于希免费高清在线观看| av欧美精品.com| 韩国精品久久久999| 日本人妻一区二区三区| 成人香蕉社区| 午夜精品久久久久久久99樱桃| 国产一区喷水| 久久亚洲天堂网| 久久性天堂网| 中文字幕欧美亚洲| 第一区免费在线观看| 欧美在线在线| 亚洲一区二区欧美| 久久久综合香蕉尹人综合网| 亚洲s码欧洲m码国产av| 日韩国产在线一| 俺去啦;欧美日韩| 久久久久亚洲av无码网站| 另类在线视频| 一本色道a无线码一区v| 午夜精品电影在线观看| 96日本xxxxxⅹxxx17| 国产精品91xxx| 91精品国产99| 国产熟女一区二区| 亚洲精品网址| 日韩高清欧美高清| 日本黄大片一区二区三区| 免费欧美网站| 疯狂欧美牲乱大交777| 日韩在线第一区| 国产毛片久久久久| 97精品超碰一区二区三区| 国产大片精品免费永久看nba| 一本一本久久a久久| 在线成人h网| 亚洲视频自拍偷拍| 四虎成人在线播放| 一区二区小说| 日韩一区二区三区免费看| 伊人成色综合网| 亚洲影视资源| 大荫蒂欧美视频另类xxxx| 五月婷婷综合色| 人妻丰满熟妇av无码区hd| 欧美激情在线一区二区| 国产精品一 二 三| 亚洲图片中文字幕| 成人av免费在线观看| 国产精品视频不卡| 日韩欧美成人一区二区三区 | 亚洲欧美精品在线| 精品国产午夜福利在线观看| 精品国产中文字幕第一页| 精品卡一卡二卡三卡四在线| 污污视频网站免费观看| 成人免费在线电影网| 欧美三级中文字| 国产98在线|日韩| 国产精品国模大尺度私拍| 男人天堂视频网| 国产成人aaaa| 成人免费淫片aa视频免费| 日韩精品手机在线| 粉嫩在线一区二区三区视频| 国产精品美女久久久久久免费 | 亚洲人永久免费| 在线观看你懂的视频| 成人羞羞在线观看网站| 亚洲精品自在久久| 国产一线在线观看| 国产真实久久| 久久中文字幕国产| 青青草自拍偷拍| 老色鬼久久亚洲一区二区| 久久久视频免费观看| 永久免费看黄网站| 国产中文字幕一区| 国产日本欧美一区二区三区在线| 日本免费在线观看视频| 99精品国产视频| 精品久久精品久久| 亚洲第一精品网站| 一区二区三区欧美久久| 麻豆md0077饥渴少妇| 婷婷精品久久久久久久久久不卡| 欧洲av在线精品| 中文字幕第36页| 免费欧美一区| 亚洲欧美国内爽妇网| 一级国产黄色片| 国产日韩亚洲| 91大神福利视频在线| 日韩欧美三级在线观看| 9l国产精品久久久久麻豆| 国产精品av一区| 亚洲精品视频91| 亚洲福利国产精品| 欧美黑人经典片免费观看| 日韩精品免费一区二区三区竹菊 | 日韩一级性生活片| 久久97久久97精品免视看秋霞| 亚洲国产成人精品女人久久久| 精品国产免费久久久久久婷婷| 伊人精品在线| 欧美亚洲成人精品| 国产精品熟女视频| 国产精品久久久久久久久久久免费看| 无遮挡亚洲一区| 亚洲热av色在线播放| 日韩欧美亚洲国产另类| 水蜜桃av无码| 日韩av成人高清| 成人深夜直播免费观看| 亚洲第一精品网站| 日韩欧美第一页| 日本 片 成人 在线| 中文字幕免费一区二区三区| 欧美黑人巨大精品一区二区| 日韩少妇高潮抽搐| 国产精品热久久久久夜色精品三区| 樱花www成人免费视频| 亚洲不卡在线| 精品亚洲一区二区三区四区五区| 亚洲精品国产91| 精品一区二区综合| 国产乱码精品一区二区三区中文| 日韩av免费| 7777精品伊人久久久大香线蕉完整版 | 色先锋久久影院av| 这里只有精品视频| 久久国产精品波多野结衣av| 91麻豆精东视频| 综合色婷婷一区二区亚洲欧美国产| 亚洲一区二区电影| 亚洲视频欧美视频| 动漫性做爰视频| 91美女在线观看| 日本一二三区视频在线| 九一亚洲精品| 欧美日本亚洲视频| 国产性生活视频| 亚洲高清免费观看 | 97伦伦午夜电影理伦片| 久久99久久久久久久久久久| 国产一区二区在线观看免费播放| 日本午夜免费一区二区| 日韩精品一二三四区| 欧美做爰啪啪xxxⅹ性| 久久美女艺术照精彩视频福利播放| 中文字幕一区二区三区四区五区六区| 国产精品国产| 久久久精品视频成人| 久久久久99精品成人片三人毛片| 亚洲欧美另类久久久精品| 亚洲综合在线网站| 国产毛片久久| 成人欧美一区二区三区在线观看| 欧美日韩va| 亚洲网站在线播放| 中国一级特黄毛片| 亚洲一区二区三区视频在线播放| 亚洲精品20p| 日韩在线一二三区| 久久精精品视频| av一级亚洲| 久久五月情影视| 中文字幕人成人乱码亚洲电影| 狠狠操狠狠色综合网| 在线观看免费视频黄| 国产高清不卡一区二区| 一级做a爰片久久| 成人区精品一区二区婷婷| 欧美一区二区三区精品电影| 国产小视频一区| 日韩女优视频免费观看| 国产97免费视频| 1000精品久久久久久久久| 9久久婷婷国产综合精品性色 | 亚洲久久久久久| 成人一区二区三区中文字幕| 佐佐木明希av| 欧美二区视频| 18成人在线| 亚洲国产中文在线二区三区免| 久久人人爽亚洲精品天堂| 中文字幕 欧美激情| 欧美日韩久久久| 波多野结衣家庭教师在线观看| 国产区在线观看成人精品 | 91免费欧美精品| www.久久热| 欧美成人三级视频网站| 99久久久国产精品无码免费| 欧美一二区视频| 91视频免费在线看| 亚洲一区二区三区四区不卡| 国产chinese中国hdxxxx| 91年精品国产| www.欧美日本| 精东粉嫩av免费一区二区三区| 裸体大乳女做爰69| 黄色欧美成人| 久久久综合亚洲91久久98| 欧美精品系列| 成人自拍性视频| 国产精品男女| 热re91久久精品国99热蜜臀| 福利一区和二区| 欧美精品亚州精品| 人妻无码中文字幕| 亚洲人成网站在线播| 亚洲特级黄色片| 精品国产91久久久久久久妲己 | 欧美探花视频资源| 最新黄色av网址| 一区二区三区高清| 亚洲最大的黄色网| 国产精品久久毛片a| 精品人妻无码中文字幕18禁| 91麻豆免费观看| 天天操狠狠操夜夜操| 成人av一区二区三区| 日本中文字幕高清| 丰满亚洲少妇av| 国产真人无码作爱视频免费| 国产精品乡下勾搭老头1| 久久久亚洲精品无码| 免费观看30秒视频久久| www婷婷av久久久影片| 久久精品网址| 久久久久久久久网| 日本少妇一区二区| www.男人天堂网| 奇米一区二区三区av| 妞干网视频在线观看| 毛片不卡一区二区| 国产在线精品91| 黑人巨大精品欧美一区| 欧美日韩在线一| 国产精品一品二品| 毛葺葺老太做受视频| 粉嫩av亚洲一区二区图片| 15—17女人毛片| 久久综合色一综合色88| 4438x全国最大成人| 亚洲国产精品ⅴa在线观看| 麻豆短视频在线观看| 国产精品久久久久毛片软件| 在线免费播放av| 亚洲欧美日韩国产综合在线| 亚洲 小说 欧美 激情 另类| 亚洲国产精品久久久久婷婷884 | 中文字幕中文字幕一区三区| 久久中文字幕一区二区三区| 成人国产一区二区三区| 免费观看在线色综合| 黑人糟蹋人妻hd中文字幕| 成人丝袜18视频在线观看| 九九热99视频| 国产精品人人做人人爽人人添| 色欲av无码一区二区三区| 黄色成人在线播放| 国产小视频在线看| 欧美一区二区视频在线观看2020| 无码人妻黑人中文字幕| 精品亚洲精品福利线在观看| 日本激情一区二区| 欧美激情国内偷拍| 精品三级国产| 国产在线视频不卡| 日韩在线观看| 日韩欧美亚洲在线| 日韩激情视频网站| 国产极品美女高潮无套久久久| 久久亚洲一级片| 内射中出日韩无国产剧情| 亚洲成人你懂的| 国产在线成人精品午夜| 精品国产免费久久| 亚洲精品97久久中文字幕| 欧美成人午夜视频| 日本一区二区三区播放| 92福利视频午夜1000合集在线观看 | 亚洲一区色图| 三年中国中文在线观看免费播放| 美腿丝袜亚洲色图| 国产精品久久久毛片| 国产精品丝袜91| sm捆绑调教视频| 56国语精品自产拍在线观看| 亚洲无码久久久久久久| 久久人人爽人人爽爽久久| 久久久久久久久久久久电影| 97netav| 亚洲精品专区| 黄在线观看网站| 国产日产精品1区| 日日操免费视频| 日韩一二三四区| 午夜精品无码一区二区三区| 欧美黑人xxx| 天天躁日日躁狠狠躁欧美| 欧美一区视久久| 毛片av中文字幕一区二区| 激情久久综合网| 亚洲大尺度视频在线观看| 秋霞精品一区二区三区| 中文字幕久精品免费视频| 欧洲精品99毛片免费高清观看| 国产一区二区在线网站| 日本成人在线不卡视频| 亚洲第一色av| 亚洲一级二级在线| 亚洲欧美偷拍视频| 久久网福利资源网站| 林ゆな中文字幕一区二区| 色播五月综合| 国产精品一级片在线观看| av鲁丝一区鲁丝二区鲁丝三区| 色天使久久综合网天天| 91av久久久| 68精品国产免费久久久久久婷婷| 国产影视一区| 青青草视频在线视频| 久久久久久久久蜜桃| √天堂中文官网8在线| 精品视频在线观看日韩| av一级久久| 精品国产乱码久久久久久郑州公司| 日韩福利视频网| 三大队在线观看| 欧美在线观看一二区| www.天堂在线| 国产精品毛片a∨一区二区三区|国| 欧美高清日韩| 手机看片福利日韩| 亚洲高清免费视频| 91亚洲国产成人久久精品麻豆 |