国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

告別ADO.NET實(shí)現(xiàn)應(yīng)用系統(tǒng)無縫切換的煩惱(總結(jié)篇)

 更新時(shí)間:2009年11月02日 14:21:43   作者:  
說起ADO.NET,就扯上了數(shù)據(jù)庫訪問類庫了,現(xiàn)在的每個(gè)項(xiàng)目的數(shù)據(jù)庫訪問類應(yīng)該說都很強(qiáng)的了,經(jīng)常就聽到說我的我們的數(shù)據(jù)庫訪問類怎么怎么強(qiáng)大而且支持多數(shù)據(jù)庫,現(xiàn)在的大家做的項(xiàng)目里用的數(shù)據(jù)庫訪問類庫我想也都是支持多數(shù)據(jù)庫吧,支持到什么程度我就不知道了
可能只是那么想也是那么設(shè)計(jì)的,要支持多數(shù)據(jù)庫,要能支持多數(shù)據(jù)庫,萬一要是以后數(shù)據(jù)庫變了怎么辦?萬一要是。。。怎么辦?這些顧慮很多時(shí)候是不必要的,反而繞了彎子。大都是做項(xiàng)目應(yīng)用系統(tǒng)而非產(chǎn)品,即使要用不同的數(shù)據(jù)庫了,基本上是吧上一個(gè)項(xiàng)目全COPY過來,修修改改OK了。產(chǎn)品可能就不一樣了,那才可能要支持真正的多數(shù)據(jù)庫,才可能會(huì)面對真正的數(shù)據(jù)庫訪問類庫的多數(shù)據(jù)庫的實(shí)際檢驗(yàn)。ADO.NET2.0下增強(qiáng)了數(shù)據(jù)庫訪問的功能,也就是工廠式類庫,提到工廠式數(shù)據(jù)庫訪問,網(wǎng)上可就多了,ADO.NET2.0增強(qiáng)的工廠式網(wǎng)上也很多了,都說只要改動(dòng)webconfig里的數(shù)據(jù)庫連接就行了,其它什么地方都不用改了,看了幾篇都是點(diǎn)了下,不知道做過充分測試沒有,應(yīng)該說在實(shí)際的多數(shù)據(jù)庫產(chǎn)品系統(tǒng)中,還要做很多修正,完善和測試的。
說正題,假設(shè)(只是假設(shè),真的不會(huì)這么變態(tài),呵呵)一產(chǎn)品系統(tǒng)要支持ACCESS,SYBASE,SQL SERVER,ORACEL數(shù)據(jù)庫,系統(tǒng)開發(fā)完后,要求只改動(dòng)數(shù)據(jù)庫的連接,也就是說只改動(dòng)webconfig,來實(shí)現(xiàn)系統(tǒng)的無縫切換,其它什么也不改動(dòng),可能有的覺得簡單,但是要經(jīng)得起實(shí)際檢驗(yàn)還是要花點(diǎn)時(shí)間測試的,當(dāng)然寫是不算難,見到過有的應(yīng)用系統(tǒng)開發(fā)中,所有的DML語句都以XML形式放在config配置文件里,然后用封裝好的數(shù)據(jù)庫訪問組件讀config配置文件執(zhí)行SQL語句,開發(fā)人員只要建個(gè)config文件把增刪改查語句寫那里就可以,當(dāng)然這么來有個(gè)好處,就是做到了與數(shù)據(jù)庫的無關(guān)性了,如果數(shù)據(jù)庫訪問組件做的完善的,當(dāng)然是可以做到系統(tǒng)無縫切換到其它數(shù)據(jù)庫的,當(dāng)然同時(shí)也有缺陷,項(xiàng)目中不僅僅是DML語句吧,有的稍微復(fù)雜點(diǎn)的邏輯,存儲(chǔ)過程要用下吧,我自己也趨向于喜歡用存儲(chǔ)過程,自定義函數(shù)來處理稍微復(fù)雜的邏輯,而且把DML語句都放在配置文件里我也是不能忍受的,可能是一個(gè)個(gè)人的習(xí)慣吧。
繼續(xù),下面開始我要說的利用ADO.NET2.0及以上版本新增的工廠式數(shù)據(jù)庫訪問實(shí)現(xiàn)應(yīng)該系統(tǒng)的無縫切換,要實(shí)現(xiàn)無縫切換,當(dāng)然還是要有前提條件了,就是各個(gè)不同的數(shù)據(jù)庫之間的表和其它對象都已經(jīng)成功移植了,沒有這個(gè)前提,純用ADO.NET做系統(tǒng)無縫切換那是不可能的了,比如SQL SERVER中寫的存儲(chǔ)過程,自定義函數(shù)直接復(fù)制到ORACLE上就行了嗎?當(dāng)然是不行,寫法及變量定義要做些調(diào)整才可以成功移植的,還有變結(jié)構(gòu)字段類型等等的都可能是要做相應(yīng)調(diào)整,這些都做好了才能談系統(tǒng)的無縫切換。要做的無縫切換,數(shù)據(jù)庫訪問層的代碼中最好(并非絕對)不應(yīng)該出現(xiàn)SqlCommand,SqlDataAdapter,SqlClient,SqlXXX吧,要切換到ORACLE數(shù)據(jù)上,甲骨文會(huì)把你的SqlXXX玩死的,ORACLE里可以O(shè)racleCommand,OracleXXX,還有程序執(zhí)行帶參數(shù)語句時(shí),比如 where userid=@userid,甲骨文也會(huì)玩死你的,oracle里可是where userid=:userid,@前綴在ACCESS,SYBASE,SQL SERVER里是都認(rèn)得,還有還有字段名的寫法問題,ORACLE里可以區(qū)分大小寫的,比如可能大多習(xí)慣這樣命名屬性和自段,UserName,UserAge,如果在ORACLE里這么命名的話,系統(tǒng)開發(fā)過程中的那種痛苦也許只有經(jīng)歷過的人才知道,ORACLE堅(jiān)持大寫為標(biāo)準(zhǔn),記得很久很久以前的一個(gè)夏天的晚上,那時(shí)我還是年輕的80后,一位數(shù)據(jù)庫設(shè)計(jì)比較N的人提到過,盡量在數(shù)據(jù)庫設(shè)計(jì)和T-SQL編程中采用大寫標(biāo)準(zhǔn),基本上接觸的SQL SERVER數(shù)據(jù)庫較多,也習(xí)慣了表名,字段名的大寫設(shè)計(jì),后來發(fā)現(xiàn)確實(shí)是有道理的。這里提到的問題都是在下面的各個(gè)方法中為了兼容不同的數(shù)據(jù)庫需要面對的問題,具體講到每個(gè)執(zhí)行方法時(shí)再具體解釋。剛才說SqlCommand,OracleComand都是各自認(rèn)得,但是DbCommand可是大家都認(rèn)得的,暫且叫抽象對象吧,還有DbConnection,DbDataAdapter等都是他們都認(rèn)得的,所以在做支持多數(shù)據(jù)庫訪問類庫時(shí),就可以用這些對象了,根據(jù)這些對象再創(chuàng)建具體對象。ADO.NET2.0中數(shù)據(jù)庫訪問工廠中有個(gè) DbProviderFactory 對象,也就是通常說的DataProvider了,正是這個(gè)起了關(guān)鍵和方便的作用,是用來創(chuàng)建提供程序?qū)?shù)據(jù)源類的實(shí)現(xiàn)的實(shí)例(就是用來創(chuàng)建實(shí)例)。另外數(shù)據(jù)庫操作還要用到參數(shù)吧,DbParameter,DbParameterCollection下面都需要用到,先貼一段類庫的構(gòu)造函數(shù),因?yàn)楣灿脤ο笮枰葘?shí)例化。
復(fù)制代碼 代碼如下:

public DbConnection conn;//抽象類型
private DbCommand cmd;//抽象類型
private DbProviderFactory provider;
private DbParameter Para;//不同數(shù)據(jù)庫參數(shù)類型的抽象類型
private DbDataAdapter Adapter;//對應(yīng)不同數(shù)據(jù)庫的數(shù)據(jù)適配器
Dictionary<Type, String> ParametersFormat;//不同數(shù)據(jù)庫參數(shù)格式化類型
public string retParaformat = string.Empty;//最終返回的格式化標(biāo)志,如@{0},:{0}
public DataProviderFactory()
{
//從配置文件中取出標(biāo)示數(shù)據(jù)庫類型的字符串并通過ProviderName的不同支持不同類型的數(shù)據(jù)庫
string providerName = ConfigurationManager.ConnectionStrings["ConnStr"].ProviderName;//也可以用索引,從1開始
//創(chuàng)建一個(gè)數(shù)據(jù)庫對應(yīng)的實(shí)例,使用該實(shí)例就可以創(chuàng)建對應(yīng)的connection,command 和adapater等等對象
provider = DbProviderFactories.GetFactory(providerName);
//創(chuàng)建具體的數(shù)據(jù)庫連接類型和命令執(zhí)行類型
conn = provider.CreateConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = conn;
//創(chuàng)建具體的參數(shù)類型
Para = provider.CreateParameter();
//創(chuàng)建具體的適配器類型
Adapter = provider.CreateDataAdapter();
//不同數(shù)據(jù)庫參數(shù)前綴格式化
ParametersFormat = new Dictionary<Type, String>();
ParametersFormat.Add(typeof(System.Data.SqlClient.SqlCommand), "@{0}");//因SQL SERVER只返回{0}沒有@前綴,在此初始化處理
//返回格式化標(biāo)志
retParaformat = GetParameterFormat(cmd);
}

上面那段代碼中,可以看到我定義了兩個(gè)公共變量,其中conn在外部只會(huì)有一個(gè)地方調(diào)用它,那就就是執(zhí)行DataReader方法的時(shí)候了,因?yàn)榇蠹叶贾纃r在離開方法體時(shí),連接是不能關(guān)閉的,
所以只能在外部調(diào)用處顯示關(guān)閉連接對象 ,必須定義為公共類型了,還有一個(gè)公共參數(shù)變量是格式化字符串的字符型。前面說到Oracle參數(shù)前綴是冒號(hào):,其它幾個(gè)數(shù)據(jù)庫前綴是@符號(hào),怎么樣在切換數(shù)據(jù)庫以后程序能動(dòng)態(tài)識(shí)別參數(shù)前綴并組合相應(yīng)的參數(shù)變量呢?如果手動(dòng)寫代碼用數(shù)據(jù)庫對象類型枚舉去一個(gè)個(gè)判斷,那這數(shù)據(jù)庫工廠也沒什么意義了,最終找到了一個(gè)相當(dāng)完美的解決方式(微軟就是微軟,都能替你想到,別人想不強(qiáng)大都難啦,呵呵),其實(shí)在做測試的時(shí)侯到各不同數(shù)據(jù)庫的參數(shù)前綴這就有點(diǎn)犯難了,手寫代碼一個(gè)個(gè)處理吧,沒問題,覺得應(yīng)該有簡單的方法吧,MS從來就不是傻瓜呀,正好前兩天在園子首頁就有篇提到這個(gè)問題,而且給出相關(guān)提示,根據(jù)給的提示再gg了一把,終于找到了一個(gè)便捷的辦法。還是貼方法代碼好了,如下:
復(fù)制代碼 代碼如下:

/// <summary>
/// 根據(jù)不同的數(shù)據(jù)庫命令對象返回該類型數(shù)據(jù)庫參數(shù)的前綴格式化字符串
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
private string GetParameterFormat(DbCommand command)
{
if (!ParametersFormat.ContainsKey(command.GetType()))
{
this.Open();//讀取參數(shù)前綴時(shí)需打開數(shù)據(jù)庫連接
ParametersFormat.Add(
command.GetType(),
command.Connection.GetSchema("DataSourceInformation")
.Rows[0]["ParameterMarkerFormat"].ToString());
//conn.Close();在真正執(zhí)行語句的時(shí)候去關(guān)閉,避免重復(fù)打開
}
return ParametersFormat[command.GetType()];
}

就是這個(gè)了 ParameterMarkerFormat,即參數(shù)標(biāo)志符格式化,如連接oracle數(shù)據(jù)庫則返回:{0},其它幾個(gè)數(shù)據(jù)庫返回@{0},惟獨(dú)SQL SERVER數(shù)據(jù)庫返回{0},到底是MS自己的東西,就是要返回跟別人不一樣的東西,也就因?yàn)檫@個(gè),這個(gè)類庫里很遺憾不得不出現(xiàn)一個(gè)SqlCommand,就是上面貼出的構(gòu)造函數(shù)里的初始化那ParametersFormat.Add(typeof(System.Data.SqlClient.SqlCommand), "@{0}");必須這樣做下處理,另外包括GetParameterFormat方法里的判斷,即不是SQL SERVER數(shù)據(jù)庫時(shí)才去讀參數(shù)前綴,如果是就直接返回@{0},有了這個(gè)格式化的前綴字符串,就好辦了.那參數(shù)名稱的賦值就可以類似這樣了string.Format("@{0}", ParaName);
下面說說各通用的方法和調(diào)用,之前的sqlhelper.cs,oraclehelper.cs,xxhelper.cs中的執(zhí)行方法大多都很多,有帶參數(shù)執(zhí)行的語句的方法,不帶參數(shù)執(zhí)行的語句的方法,帶參數(shù)執(zhí)行的方法體里面還要循環(huán)參數(shù),這些都我都精簡掉了,最終演變成了peacehelper.cs(開個(gè)玩笑).帶參執(zhí)行和不帶參執(zhí)行DML語句,其實(shí)是可以合并成一個(gè)方法,各個(gè)參數(shù)都是保存在數(shù)據(jù)庫命令對象的參數(shù)集合中的,我們可以把創(chuàng)建好的命令對象返回給外部程序調(diào)用處,調(diào)用的地方要帶參執(zhí)行語句的話,就定義參數(shù)并賦值就行了,不帶參執(zhí)行的話就不用定義參數(shù)了,這么以來就只需要寫一個(gè)方法就行了,而且執(zhí)行帶摻的語句時(shí)不用再循環(huán)參數(shù)集合了,因?yàn)樵谡{(diào)用處定義參數(shù)時(shí),該參數(shù)已經(jīng)綁定都了DbCommand對象了.寫一個(gè)返回給外部調(diào)用的數(shù)據(jù)庫命令對象的方法,如下:
復(fù)制代碼 代碼如下:

/// <summary>
/// 抽象參數(shù)集合類型
/// </summary>
/// <returns></returns>
public DbParameterCollection GetParmCollection()
{
return cmd.Parameters;
}

添加參數(shù)的方法如下:
復(fù)制代碼 代碼如下:

/// <summary>
/// 添加參數(shù)
/// </summary>
/// <param name="ParaName">參數(shù)名稱</param>
/// <param name="SqlType">參數(shù)數(shù)據(jù)類型</param>
/// <param name="ParaValue">參數(shù)值</param>
/// <param name="ParaCollect">參數(shù)對象的集合</param>
public void AddParam(string ParaName, DbType SqlType, object ParaValue, DbParameterCollection ParaCollect)
{
//不允許將一個(gè)DbCommand對象的Parameters插入到另外一個(gè)DbCommand對象,那么多個(gè)參數(shù)的話可以加上下面一句判斷
//如果已經(jīng)存在至少一個(gè)對象時(shí),再深層拷貝一個(gè)
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat, ParaName);
Para.DbType = SqlType;
if (ParaValue == null)
{
Para.Value = string.Empty;//DBNull.Value;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}

上面有句判斷,如果有多個(gè)參數(shù)會(huì)出異常,網(wǎng)上搜了下,注釋就是網(wǎng)上的解釋,不多說了,意思很清楚。這個(gè)方法里還有一點(diǎn),如果DbType參數(shù)不要的話測試也是可以通過的,猜想如果不顯示指定參數(shù)數(shù)據(jù)類型的話,是不是都默認(rèn)為object類型?這樣的話會(huì)不會(huì)涉及一個(gè)裝拆箱的操作呢?但是開發(fā)人員在調(diào)用處添加參數(shù),是不應(yīng)該關(guān)心參數(shù)的數(shù)據(jù)類型才對,干脆數(shù)據(jù)類型參數(shù)不要了,改成如下方法了:
復(fù)制代碼 代碼如下:

public void AddParam(string ParaName, object ParaValue, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat, ParaName);//將參數(shù)格式化為具體的數(shù)據(jù)庫參數(shù)格式
if (ParaValue == null)
{
Para.Value = string.Empty;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}

為了兼容不同的數(shù)據(jù)庫(主要是oracle變量特殊問題),添加參數(shù)的方法分兩種,一種是普通帶參執(zhí)行的DML語句,一種是代參執(zhí)行的存儲(chǔ)過程。對于SQL SERVER數(shù)據(jù)庫即使是存儲(chǔ)過程
變量參數(shù)仍是@前綴,ORACLE存儲(chǔ)過程又是什么前綴呢?很遺憾,ORACLE存儲(chǔ)過程的參數(shù)變量是不需要任何前綴的,為了單獨(dú)兼容這一點(diǎn),對于不同數(shù)據(jù)庫如果調(diào)用的存儲(chǔ)過程有參數(shù)
的話,建議用下面的三個(gè)添加參數(shù)的方法:
復(fù)制代碼 代碼如下:

/// <summary>
/// 存儲(chǔ)過程輸入?yún)?shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddInputParam(string ParaName, object ParaValue, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":",""), ParaName);//ORACLE存儲(chǔ)過程參數(shù)前沒有冒號(hào)
if (ParaValue == null)
{
Para.Value = string.Empty;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}
/// <summary>
/// 存儲(chǔ)過程輸出參數(shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddOutputParam(string ParaName, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":", ""), ParaName);
Para.Value = string.Empty;
ParaCollect.Add(Para);
ParaCollect[Para.ParameterName].Direction = System.Data.ParameterDirection.Output;//指定該參數(shù)為輸出參數(shù)
}
/// <summary>
/// 存儲(chǔ)過程返回值參數(shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddReturnParam(string ParaName,DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":", ""), ParaName);
Para.Value = string.Empty;
ParaCollect.Add(Para);
ParaCollect[Para.ParameterName].Direction = System.Data.ParameterDirection.ReturnValue;//指定該參數(shù)為返回值參數(shù)
}

OK,現(xiàn)在開始說下peacehelper.cs里的八大方法(其實(shí)算起來應(yīng)該是10個(gè)),應(yīng)該來說涵蓋絕大多應(yīng)該系統(tǒng)操作數(shù)據(jù)庫的絕大部分功能,如果有特殊的操作可以在此基礎(chǔ)上添加。
第一個(gè),大家都熟悉的返回結(jié)果集:
復(fù)制代碼 代碼如下:

/// <summary>
/// 執(zhí)行SQL并返回?cái)?shù)據(jù)集
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataSet ExecDataSet(string Sql)
{
DataSet ds = new DataSet();
try
{
this.Open();
cmd.CommandText = Replace(Sql);
Adapter.SelectCommand = cmd;
Adapter.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return ds;
}

上面的方法大家看了是不是覺得既簡單又熟悉,確實(shí)是的,但仍然相當(dāng)以前的xxhelper.cs里是做了簡化的,該方法既可以直接執(zhí)行不帶參DML語句,也可以執(zhí)行帶參的,但是該方法的形參卻
只有一個(gè),之前的xxhelper.cs里帶參執(zhí)行的話,形參中大多至少還另外一個(gè)形參的,比如SqlPeremeters[]類型或參數(shù)集合類型的形參,而且方法體里面大多會(huì)循環(huán)讀取參數(shù),上面的方法里
卻沒有,都簡化掉了,唯一多了一點(diǎn)的是,所執(zhí)行的命令語句執(zhí)行前要做一個(gè)特殊字符替換,cmd.CommandText = Replace(Sql),Replace方法主要是替換參數(shù)前綴,Replace方法如下:
復(fù)制代碼 代碼如下:

/// <summary>
/// 替換DML語句里的參數(shù)前綴
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string Replace(string str)
{
return str.Replace("$", retParaformat.Substring(0, 1));
}

因?yàn)椴煌瑪?shù)據(jù)庫除了在添加參數(shù)時(shí)有前綴的區(qū)別,再具體執(zhí)行語句時(shí)也有前綴區(qū)別嘛,比如SQL SERVER里 SELECT USER_NAME,USER_AGE FROM USERS WHERE USER_ID=@USER_ID,ORACLE里是這樣的SELECT USER_NAME,USER_AGE FROM USERS WHERE USER_ID=:USER_ID,在此就需要統(tǒng)一一個(gè)前綴規(guī)則了,統(tǒng)一這樣SELECT USER_NAME,USER_AGE FROM USERS WHERE USER_ID=$USER_ID,在執(zhí)行前根據(jù)不同數(shù)據(jù)庫替換前綴$符號(hào),當(dāng)然這個(gè)約定規(guī)則不一定是最完美的,也許還存在一定的問題,寫到這我也突然想起來之前我見過別人
的系統(tǒng)中有的就是變量參數(shù)用的這種類似特殊符號(hào),肯定也是為了兼容多數(shù)據(jù)庫所作的處理了,呵呵,具體的調(diào)用及測試之后統(tǒng)一說明。還有幾個(gè)方法也和上面類似,大家都熟悉的。如下(不再做具體解釋了):
復(fù)制代碼 代碼如下:

/// <summary>
/// 執(zhí)行SQL語句并返回DataReader對象
/// </summary>
/// <param name="dbcon"></param>
/// <param name="cmdText"></param>
/// <returns></returns>
public DbDataReader ExecuteDataReader(DbConnection dbcon,string cmdText)
{
try
{
if (dbcon.State == ConnectionState.Closed)
{
dbcon.Open();
}
cmd.CommandText = Replace(cmdText);
DbDataReader dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
cmd.Dispose();
return dr;
}
catch
{
dbcon.Close();//發(fā)生異常在此處關(guān)閉,否則在調(diào)用顯式處關(guān)閉
return null;
}
}

/// <summary>
/// 判斷記錄是否存在
/// </summary>
/// <param name="Sql"></param>
/// <returns></returns>
public bool Exist(string Sql)
{
bool exist;
this.Open();
cmd.CommandText = Replace(Sql);
DbDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
exist = true; //記錄存在
}
else
{
exist = false; //記錄不存在
}
dr.Close();
this.Close();
return exist;
}
/// <summary>
/// 執(zhí)行SQL語句
/// </summary>
/// <param name="sql"></param>
public void ExecSql(string Sql)
{
try
{
this.Open();
cmd.CommandText = Replace(Sql);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}

}
/// <summary>
/// 執(zhí)行SQL語句,返回一個(gè)單值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public string ReturnValue(string Sql)
{
object returnValue = string.Empty;
try
{
this.Open();
cmd.CommandText = Replace(Sql);
returnValue = cmd.ExecuteScalar();
if (returnValue == null)
{
returnValue = string.Empty;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return returnValue.ToString();
}
/// <summary>
/// 執(zhí)行多條SQL語句并啟用數(shù)據(jù)庫事務(wù)
/// </summary>
/// <param name="SQLStringList"></param>
public bool ExecSqlTran(List<String> SQLStringList)
{
this.Open();
DbTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
cmd.CommandText = Replace(SQLStringList[n]);
cmd.ExecuteNonQuery();
}
trans.Commit();
return true;
}
catch
{
trans.Rollback();
return false;
}
finally
{
this.Close();
}
}

下面說下兩個(gè)存儲(chǔ)過程,存儲(chǔ)過程基本上分兩種,返回結(jié)果集的存儲(chǔ)過程和執(zhí)行業(yè)務(wù)邏輯不返回結(jié)果集但卻有返回值(如標(biāo)志等),對于需要有返回值的存儲(chǔ)過程,我個(gè)人趨向于用輸出
參數(shù)代替返回值,因?yàn)槎寄苓_(dá)到一樣的效果目的,而且輸出參數(shù)可以有多個(gè),也就可以根據(jù)需要能有多個(gè)所謂的“返回值”,所以我之前的開發(fā)中一直是用output參數(shù)來代替return參數(shù)。

復(fù)制代碼 代碼如下:

/// <summary>
/// 執(zhí)行存儲(chǔ)過程并返回結(jié)果集
/// </summary>
/// <param name="storedProcName">存儲(chǔ)過程名</param>
/// <returns>DataSet</returns>
public DataSet RunProcedure(string storedProcName)
{
DataSet ds = new DataSet();
try
{
this.Open();
cmd.CommandText = storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
Adapter.SelectCommand = cmd;
//Adapter.SelectCommand.CommandTimeout = 1200;//可以設(shè)置適當(dāng)?shù)某瑫r(shí)時(shí)間(秒),避免選擇時(shí)間段過大導(dǎo)致填充數(shù)據(jù)集超時(shí)
Adapter.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return ds;
}
/// <summary>
/// 執(zhí)行存儲(chǔ)過程,方法不返回結(jié)果集
/// </summary>
/// <param name="storedProcName"></param>
public void RunVoidProcedure(string storedProcName)
{
cmd.CommandText = storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
try
{
this.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
}

下面說兩個(gè)反射方法,測試之后為了方便調(diào)用,減少操作添加的,一個(gè)是把實(shí)體類的屬性轉(zhuǎn)換為參數(shù),另一個(gè)是把從數(shù)據(jù)庫取出的某條記錄轉(zhuǎn)換為實(shí)體類,這兩個(gè)還是非常有用,尤其是在系統(tǒng)開發(fā)時(shí)調(diào)用比較方便,以前我是見到反射就繞道走的,這次算是第一次用反射,發(fā)現(xiàn)確實(shí)是很方便。如下:
復(fù)制代碼 代碼如下:

/// <summary>
/// 將實(shí)體類的屬性進(jìn)行參數(shù)轉(zhuǎn)換(ORACLE測試通不過,必須要求所有參數(shù)都包含在語句中才行)
/// </summary>
/// <param name="model"></param>
/// <param name="ParaCollect"></param>
//public void ConvertToParameters(object model, DbParameterCollection ParaCollect)
//{
// Type T = model.GetType();
// PropertyInfo[] propert = T.GetProperties();
// for (int i = 0; i < propert.Length; i++)
// {
// AddParam(propert[i].Name, propert[i].GetValue(model, null), ParaCollect);
// }
//}
/// <summary>
/// 將實(shí)體類的屬性進(jìn)行參數(shù)轉(zhuǎn)換
/// </summary>
/// <param name="model"></param>
/// <param name="ParaCollect"></param>
public void ConvertToParameters(object model, DbParameterCollection ParaCollect,List<string> fields)
{
Type T = model.GetType();
PropertyInfo[] propert = T.GetProperties();
for (int i = 0; i < propert.Length; i++)
{
if (fields.Contains(propert[i].Name)) //檢測必須參數(shù)化的實(shí)體屬性
{
AddParam(propert[i].Name, propert[i].GetValue(model, null), ParaCollect);
}
}
}

/// <summary>
/// 通過反射將取出的數(shù)據(jù)寫入實(shí)體類(ORACLE測試通不過,需進(jìn)行類型強(qiáng)制轉(zhuǎn)換)
/// </summary>
/// <param name="model"></param>
/// <param name="cmdText"></param>
//public void GetModel(object model, string cmdText)
//{
// PropertyInfo propertyInfo;
// DbDataReader dr = ExecuteDataReader(conn, cmdText);
// while (dr.Read())
// {
// for (int i = 0; i < dr.FieldCount; i++)
// {
// propertyInfo = model.GetType().GetProperty(dr.GetName(i));
// if (propertyInfo != null)
// {
// if (dr.GetValue(i) != DBNull.Value)
// {
// //Type t = dr.GetValue(i).GetType();
// propertyInfo.SetValue(model, dr.GetValue(i), null);
// }
// }
// }
// }
// dr.Close();
// conn.Close();
//}
/// <summary>
/// 通過反射將數(shù)據(jù)綁定到實(shí)體對象,由于不同數(shù)據(jù)庫對應(yīng)于.NET的數(shù)據(jù)類型不一樣
/// 需做強(qiáng)制類型轉(zhuǎn)換
/// </summary>
/// <param name="model"></param>
/// <param name="cmdText"></param>
public void GetModel(object model, string cmdText)
{
PropertyInfo propertyInfo;
DbDataReader dr = ExecuteDataReader(conn, cmdText);
object _value;
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
propertyInfo = model.GetType().GetProperty(dr.GetName(i));
if (propertyInfo != null && dr.GetValue(i) != DBNull.Value)
{
switch (propertyInfo.PropertyType.ToString())
{
case "System.String":
{
_value = Convert.ToString(dr.GetValue(i));//字符串是全球通用類型,也可以不用轉(zhuǎn)換
propertyInfo.SetValue(model, _value, null);
}break;
case "System.Int32":
{
_value = Convert.ToInt32(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Single":
{
_value = Convert.ToSingle(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Decimal":
{
_value = Convert.ToDecimal(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Double":
{
_value = Convert.ToDouble(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "":
{
_value = Convert.ToDateTime(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
default: break;
}
}
}
}
dr.Close();
conn.Close();
}

從上面的注釋掉的方法對比中可以看到為了兼容不同的數(shù)據(jù)庫,必須要做額外的處理,比如類型轉(zhuǎn)換,SQL SERVER的int 對應(yīng)ORALCE的number,UserInfo的字段屬性UserAge定義的是int類型,連接ORALCE時(shí),.NET識(shí)別number類型為System.Decimal,把Decimal賦值給Int32當(dāng)然是不行的,所以得做強(qiáng)制轉(zhuǎn)換才行。還有一點(diǎn)要注意下,就是將數(shù)據(jù)綁定到實(shí)體對象時(shí),由于ORACLE堅(jiān)持大寫標(biāo)準(zhǔn)和解析機(jī)制,如果屬性名和字段名大小寫不一致的話,propertyInfo = model.GetType().GetProperty(dr.GetName(i)) ,propertyInfo 始終是null值,比如SELECT UserName,UserAge FROM USER_TEST WHERE USERID=$USERID,SQL SERVER 執(zhí)行的時(shí)候調(diào)試可以看到dr.GetName(0)是UserName,dr.GetName(1)是UserAge,ORACLE執(zhí)行解析就變了,全是大寫了,變成了USERNAE,USERAGE,這么一來和找不到UserInfo類的屬性了,因?yàn)閁serInfo類的屬性是 UserName,和UserAge,C#語言變量也是區(qū)分大小寫的嘛,當(dāng)然就找不到了,所以propertyInfo就為null了,故在這里再次建議大家在數(shù)據(jù)庫設(shè)計(jì)和程序字段屬性設(shè)計(jì)時(shí)采用大寫標(biāo)準(zhǔn)(如果不涉及多數(shù)據(jù)庫當(dāng)然也不需要這么做)。
最后說下測試調(diào)用代碼,首先webconfig配置里面這樣配置下,主要選取SQL SERVER和ORACLE做測試,畢竟這是.NET支持的兩個(gè)典型數(shù)據(jù)庫,要是把.NET所支持的所有書庫都測試一遍,那測試量可不小了,呵呵。

復(fù)制代碼 代碼如下:

<connectionStrings>
<add name="ConnStr" connectionString="uid=sa;pwd=peace;database=TEST;server=." providerName="System.Data.SqlClient" />
<!--<add name="ConnStr" connectionString="server=.;data source=peace;user id=cct;password=cct;enlist=true" providerName="System.Data.OracleClient"/>-->
</connectionStrings>


protected void Page_Load(object sender, EventArgs e)
{
//測試DataReader,SQLSERVER和ORACLE都通過
//DataProviderFactory fac = new DataProviderFactory();
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("USERID", 100, ParaCollect);
//DbDataReader dr = fac.ExecuteDataReader(fac.conn, "SELECT * FROM USER_TEST WHERE USERID=$USERID");
//while (dr.Read())
//{
// string a = dr[1].ToString();
//}
//fac.conn.Close();//在調(diào)用處顯示關(guān)閉

//無參數(shù)DataSet測試 SQLSERVER和ORACLE都通過
//DataTable dt = fac.ExecDataSet("SELECT * FROM USER_TEST").Tables[0];
//帶參數(shù)DataSet測試 SQLSERVER和ORACLE都通過
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("USERID", 100, ParaCollect);
//fac.AddParam("USERNAME", "局%", ParaCollect);//這里的參數(shù)名可以任意成其它,不一定非要和字段名相同(下同)
//DataTable dt = fac.ExecDataSet("SELECT * FROM USER_TEST WHERE USERNAME LIKE $USERNAME").Tables[0];
//DataTable dt = fac.ExecDataSet("SELECT * FROM USER_TEST WHERE USERID=$USERID OR USERNAME LIKE $USERNAME").Tables[0];//多參數(shù)測試
//單值測試(帶參數(shù)) SQLSERVER和ORACLE都通過
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("USERID", 100, ParaCollect);
//string retValue = fac.ReturnValue("SELECT USERNAME FROM USER_TEST WHERE USERID=$USERID");
//帶參存儲(chǔ)過程測試返回結(jié)果集 SQLSERVER和ORACLE都通過
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("StartDate", "2009-8-1", ParaCollect);
//fac.AddParam("EndDate", "2009-8-21", ParaCollect);
//DataTable dt = fac.RunProcedure("USP_GetMixedReport").Tables[0];

//帶參數(shù)測試存儲(chǔ)過程的輸出參數(shù)值和返回值,方法不返回結(jié)果集 SQLSERVER通過
//int flag = 0, sign = 0, ret = 0;
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("USER_ACCOUNT", DbType.String, "admin", ParaCollect);
//fac.AddParam("USER_PWD", DbType.String, "68053af2923e00204c3ca7c6a3150cf7", ParaCollect);
//fac.AddParam("FLAG", DbType.Int32, "", ParaCollect);
//ParaCollect["@FLAG"].Direction = System.Data.ParameterDirection.Output;
//fac.AddParam("SIGN", DbType.Int32, "", ParaCollect);
//ParaCollect["@SIGN"].Direction = System.Data.ParameterDirection.Output;
//fac.AddParam("RetValue", DbType.String, "", ParaCollect);
//ParaCollect["@RetValue"].Direction = System.Data.ParameterDirection.ReturnValue;
//fac.RunVoidProcedure("SP_ValideLogin");
//flag = int.Parse(ParaCollect["@FLAG"].Value.ToString());
//sign = int.Parse(ParaCollect["@SIGN"].Value.ToString());
//ret = int.Parse(ParaCollect["@RetValue"].Value.ToString());//存儲(chǔ)過程約定返回值必須是int型

//改進(jìn)后帶參數(shù)測試存儲(chǔ)過程的輸出參數(shù)值和返回值的測試 SQLSERVER和ORACLE都通過
//int flag = 0, sign = 0, ret = 0;
//DataProviderFactory fac = new DataProviderFactory();
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddInputParam("USER_ACCOUNT", "admin", ParaCollect);
//fac.AddInputParam("USER_PWD", "68053af2923e00204c3ca7c6a3150cf7", ParaCollect);
//fac.AddOutputParam("FLAG", ParaCollect);
//fac.AddOutputParam("SIGN", ParaCollect);
//fac.AddReturnParam("RetValue", ParaCollect);
//fac.RunVoidProcedure("SP_ValideLogin");
//string prefix = fac.retParaformat.Replace(":","");//Oracle存儲(chǔ)過程參數(shù)前冒號(hào)移除掉
//flag = int.Parse(ParaCollect[string.Format(prefix,"FLAG")].Value.ToString());
//sign = int.Parse(ParaCollect[string.Format(prefix, "SIGN")].Value.ToString());
//ret = int.Parse(ParaCollect[string.Format(prefix, "RetValue")].Value.ToString());//存儲(chǔ)過程約定返回值必須是int型

//調(diào)用存儲(chǔ)過程測試 SQLSERVER和ORACLE都通通過
//DataProviderFactory fac = new DataProviderFactory();
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddInputParam("P_UserID", 7, ParaCollect);
//fac.AddInputParam("P_UserName", "peace", ParaCollect);
//fac.AddInputParam("P_UserAge", 100, ParaCollect);
//fac.RunVoidProcedure("PROC_USER_TEST_ADD");
//多條提交事務(wù)處理測試 SQLSERVER和ORACLE都通過
//List<string> SqlList = new List<string>();
//DataProviderFactory fac = new DataProviderFactory();
//DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam("UserName", "peaceli", ParaCollect);
//fac.AddParam("UserAge", 150, ParaCollect);
//SqlList.Add("INSERT INTO USER_TEST(UserName,UserAge) VALUES($UserName,$UserAge)");
//SqlList.Add("INSERT INTO USER_TEST(UserName,UserAge) VALUES($UserName,$UserAge)");
//SqlList.Add("INSERT INTO USER_TEST(UserName,UserAge) VALUES($UserName,$UserAge)");
//fac.ExecSqlTran(SqlList);
//插入操作參數(shù)測試(SQL SERVER) 通過
//UserInfo ui = new UserInfo();
//ui.UserName = "hello peace";
//ui.UserAge = 100;
//Addinn(ui);
//插入操作參數(shù)測試(Oracle) 通過
//UserInfo ui = new UserInfo();
//ui.USERID = 10;
//ui.USERNAME = "hello peace";
//ui.USERAGE = 120;
//Addin(ui);
//插入操作反射參數(shù)轉(zhuǎn)換測試 SQLSERVER和ORACLE都通過
//UserInfo ui = new UserInfo();
//ui.USERNAME = "peaceli";
//ui.USERAGE = 110;
//Add(ui);
//返回實(shí)體對象測試 SQLSERVER和ORACLE都通過
UserInfo ui = new UserInfo();
ui.USERID = 1;
GetInfo(ui);
}
//private void Addinn(UserInfo ui)
//{
// DataProviderFactory fac = new DataProviderFactory();
// DbParameterCollection ParaCollect = fac.GetParmCollection();
// fac.AddParam("@UserName", ui.UserName, ParaCollect);
// fac.AddParam("@UserAge", ui.UserAge, ParaCollect);
// fac.ExecSql("INSERT INTO USER_TEST(UserName,UserAge) VALUES(@UserName,@UserAge)");
//}
private void Addin(UserInfo ui)
{
DataProviderFactory fac = new DataProviderFactory();
DbParameterCollection ParaCollect = fac.GetParmCollection();
//fac.AddParam(":UserName", ui.UserName, ParaCollect);//給參數(shù)賦值時(shí)冒號(hào)可以不加,但有的版本可能必須加
//fac.AddParam(":UserAge", ui.UserAge, ParaCollect);
//fac.AddParam("UserID", ui.USERID, ParaCollect); //這行注釋放開在ORACLE下同不過,ORACLE要求所全參數(shù)匹配,有多余參數(shù)就不行,這點(diǎn)有些變態(tài)
fac.AddParam("UserName", ui.USERNAME, ParaCollect);//SQL SERVER只要求用到的參數(shù)包含在參數(shù)集合里就行了,其它多余參數(shù)并不影響執(zhí)行
fac.AddParam("UserAge", ui.USERAGE, ParaCollect);
fac.ExecSql("INSERT INTO USER_TEST(UserName,UserAge) VALUES(:UserName,:UserAge)");
}
private void Add(UserInfo ui)
{
DataProviderFactory fac = new DataProviderFactory();
DbParameterCollection ParaCollect = fac.GetParmCollection();
string[] fields = { "USERNAME", "USERAGE" };//要求參數(shù)化的實(shí)體屬性
List<string> ListFields = new List<string>(fields);
fac.ConvertToParameters(ui, ParaCollect, ListFields);//如果新增記錄有很多參數(shù)的話,可能AddParam很多次,采用反射批量轉(zhuǎn)換
fac.ExecSql("INSERT INTO USER_TEST(USERNAME,USERAGE) VALUES($USERNAME,$USERAGE)");
}
private void GetInfo(UserInfo ui)
{
DataProviderFactory fac = new DataProviderFactory();
DbParameterCollection ParaCollect = fac.GetParmCollection();
fac.AddParam("USERID", ui.USERID, ParaCollect);
fac.GetModel(ui, "SELECT USERNAME,USERAGE FROM USER_TEST WHERE USERID=$USERID");
}
}

UserInfo類如下:

復(fù)制代碼 代碼如下:

public class UserInfo
{
public int USERID { get; set; }
public string USERNAME { get; set; }
public int USERAGE { get; set; }
}

測試到最后類屬性改動(dòng)過,統(tǒng)一改成了大寫,再次建議大寫標(biāo)準(zhǔn)(包括數(shù)據(jù)庫設(shè)計(jì)),可以定義成USER_ID,USER_NAME,USER_AGE等,并與數(shù)據(jù)庫字段名保持一致,這樣有利于多數(shù)據(jù)庫的
兼容。
結(jié)語:個(gè)人并不反對項(xiàng)目里單獨(dú)用對應(yīng)的xxhelper.cs,某個(gè)項(xiàng)目用SQLSERVER數(shù)據(jù)庫,就用SqlHelper.csL類,ORACLE就用OracleHelper.cs類,這樣來得更干脆快捷,基本上每個(gè)項(xiàng)目都是這對特定的數(shù)據(jù)庫在開發(fā),沒必要搞成通用類,真要搞成通用類,要經(jīng)過大量的實(shí)際測試,也許我最近有時(shí)寂寞空虛也無聊,突然想測試下同時(shí)也想改進(jìn)下,呵呵,零零碎碎花了點(diǎn)時(shí)間測試了下,選取兩個(gè)數(shù)據(jù)庫測試了一遍,最終只需要改動(dòng)config配置的數(shù)據(jù)庫連接就可以了,真正達(dá)到了一套系統(tǒng)的無縫切換。里面有些可能還說的不夠準(zhǔn)確,可能也還有遺漏的地方,僅供參考吧!!!
訪問類庫的文件完整的貼一次,如下:

復(fù)制代碼 代碼如下:

//*****************************************************************************************************************
//* 編寫人 :peace
//* EMAIL : peacechzh@126.com
//* 開發(fā)日期:2009-10-21
//* 修 改 人:
//* 修改日期:
//* 描 述:數(shù)據(jù)庫工廠訪問類
//* 更新描述:里面供調(diào)用執(zhí)行的各方法可帶參數(shù)執(zhí)行,在外部指定參數(shù)名和參數(shù)值即可。
//* 最終期望:支持.NET所支持的所有數(shù)據(jù)庫并達(dá)到系統(tǒng)的無縫切換(盡情的忽悠吧O(∩_∩)O~)
//*****************************************************************************************************************
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Configuration;
using System.Reflection;
namespace DataProvider
{
public class DataProviderFactory
{
public DbConnection conn;//抽象類型
private DbCommand cmd;//抽象類型
private DbProviderFactory provider;
private DbParameter Para;//不同數(shù)據(jù)庫參數(shù)類型的抽象類型
private DbDataAdapter Adapter;//對應(yīng)不同數(shù)據(jù)庫的數(shù)據(jù)適配器
Dictionary<Type, String> ParametersFormat;//不同數(shù)據(jù)庫參數(shù)格式化類型
public string retParaformat = string.Empty;//最終返回的格式化標(biāo)志,如@{0},:{0}
public DataProviderFactory()
{
//從配置文件中取出標(biāo)示數(shù)據(jù)庫類型的字符串并通過ProviderName的不同支持不同類型的數(shù)據(jù)庫
string providerName = ConfigurationManager.ConnectionStrings["ConnStr"].ProviderName;//也可以用索引,從1開始
//創(chuàng)建一個(gè)數(shù)據(jù)庫對應(yīng)的實(shí)例,使用該實(shí)例就可以創(chuàng)建對應(yīng)的connection,command 和adapater等等對象
provider = DbProviderFactories.GetFactory(providerName);
//創(chuàng)建具體的數(shù)據(jù)庫連接類型和命令執(zhí)行類型
conn = provider.CreateConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = conn;
//創(chuàng)建具體的參數(shù)類型
Para = provider.CreateParameter();
//創(chuàng)建具體的適配器類型
Adapter = provider.CreateDataAdapter();
//不同數(shù)據(jù)庫參數(shù)前綴格式化
ParametersFormat = new Dictionary<Type, String>();
ParametersFormat.Add(typeof(System.Data.SqlClient.SqlCommand), "@{0}");//因SQL SERVER只返回{0}沒有@前綴,在此初始化處理
//返回格式化標(biāo)志
retParaformat = GetParameterFormat(cmd);
}
/// <summary>
/// 添加參數(shù)
/// </summary>
/// <param name="ParaName">參數(shù)名稱</param>
/// <param name="SqlType">參數(shù)數(shù)據(jù)類型</param>
/// <param name="ParaValue">參數(shù)值</param>
/// <param name="ParaCollect">參數(shù)對象的集合</param>
public void AddParam(string ParaName, DbType SqlType, object ParaValue, DbParameterCollection ParaCollect)
{
//不允許將一個(gè)DbCommand對象的Parameters插入到另外一個(gè)DbCommand對象,那么多個(gè)參數(shù)的話可以加上下面一句判斷
//如果已經(jīng)存在至少一個(gè)對象時(shí),再深層拷貝一個(gè)
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat, ParaName);
Para.DbType = SqlType;
if (ParaValue == null)
{
Para.Value = string.Empty;//DBNull.Value;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}
public void AddParam(string ParaName, object ParaValue, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat, ParaName);//將參數(shù)格式化為具體的數(shù)據(jù)庫參數(shù)格式
if (ParaValue == null)
{
Para.Value = string.Empty;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}
/// <summary>
/// 存儲(chǔ)過程輸入?yún)?shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddInputParam(string ParaName, object ParaValue, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":",""), ParaName);//ORACLE存儲(chǔ)過程參數(shù)前沒有冒號(hào)
if (ParaValue == null)
{
Para.Value = string.Empty;
}
else
{
Para.Value = ParaValue;
}
ParaCollect.Add(Para);
}
/// <summary>
/// 存儲(chǔ)過程輸出參數(shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddOutputParam(string ParaName, DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":", ""), ParaName);
Para.Value = string.Empty;
ParaCollect.Add(Para);
ParaCollect[Para.ParameterName].Direction = System.Data.ParameterDirection.Output;//指定該參數(shù)為輸出參數(shù)
}
/// <summary>
/// 存儲(chǔ)過程返回值參數(shù)
/// </summary>
/// <param name="ParaName"></param>
/// <param name="ParaValue"></param>
/// <param name="ParaCollect"></param>
public void AddReturnParam(string ParaName,DbParameterCollection ParaCollect)
{
if (ParaCollect.Count >= 1)
{
Para = (DbParameter)((ICloneable)ParaCollect[0]).Clone();
}
Para.ParameterName = string.Format(retParaformat.Replace(":", ""), ParaName);
Para.Value = string.Empty;
ParaCollect.Add(Para);
ParaCollect[Para.ParameterName].Direction = System.Data.ParameterDirection.ReturnValue;//指定該參數(shù)為返回值參數(shù)
}
/// <summary>
/// 抽象參數(shù)集合類型
/// </summary>
/// <returns></returns>
public DbParameterCollection GetParmCollection()
{
return cmd.Parameters;
}
/// <summary>
/// 執(zhí)行SQL并返回?cái)?shù)據(jù)集
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataSet ExecDataSet(string Sql)
{
DataSet ds = new DataSet();
try
{
this.Open();
cmd.CommandText = Replace(Sql);
Adapter.SelectCommand = cmd;
Adapter.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return ds;
}
/// <summary>
/// 執(zhí)行SQL語句并返回DataReader對象
/// </summary>
/// <param name="dbcon"></param>
/// <param name="cmdText"></param>
/// <returns></returns>
public DbDataReader ExecuteDataReader(DbConnection dbcon,string cmdText)
{
try
{
if (dbcon.State == ConnectionState.Closed)
{
dbcon.Open();
}
cmd.CommandText = Replace(cmdText);
DbDataReader dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
cmd.Dispose();
return dr;
}
catch
{
dbcon.Close();//發(fā)生異常在此處關(guān)閉,否則在調(diào)用顯式處關(guān)閉
return null;
}
}

/// <summary>
/// 判斷記錄是否存在
/// </summary>
/// <param name="Sql"></param>
/// <returns></returns>
public bool Exist(string Sql)
{
bool exist;
this.Open();
cmd.CommandText = Replace(Sql);
DbDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
exist = true; //記錄存在
}
else
{
exist = false; //記錄不存在
}
dr.Close();
this.Close();
return exist;
}
/// <summary>
/// 執(zhí)行SQL語句
/// </summary>
/// <param name="sql"></param>
public void ExecSql(string Sql)
{
try
{
this.Open();
cmd.CommandText = Replace(Sql);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}

}
/// <summary>
/// 執(zhí)行SQL語句,返回一個(gè)單值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public string ReturnValue(string Sql)
{
object returnValue = string.Empty;
try
{
this.Open();
cmd.CommandText = Replace(Sql);
returnValue = cmd.ExecuteScalar();
if (returnValue == null)
{
returnValue = string.Empty;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return returnValue.ToString();
}
/// <summary>
/// 執(zhí)行多條SQL語句并啟用數(shù)據(jù)庫事務(wù)
/// </summary>
/// <param name="SQLStringList"></param>
public bool ExecSqlTran(List<String> SQLStringList)
{
this.Open();
DbTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
cmd.CommandText = Replace(SQLStringList[n]);
cmd.ExecuteNonQuery();
}
trans.Commit();
return true;
}
catch
{
trans.Rollback();
return false;
}
finally
{
this.Close();
}
}

/// <summary>
/// 執(zhí)行存儲(chǔ)過程并返回結(jié)果集
/// </summary>
/// <param name="storedProcName">存儲(chǔ)過程名</param>
/// <returns>DataSet</returns>
public DataSet RunProcedure(string storedProcName)
{
DataSet ds = new DataSet();
try
{
this.Open();
cmd.CommandText = storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
Adapter.SelectCommand = cmd;
//Adapter.SelectCommand.CommandTimeout = 1200;//可以設(shè)置適當(dāng)?shù)某瑫r(shí)時(shí)間(秒),避免選擇時(shí)間段過大導(dǎo)致填充數(shù)據(jù)集超時(shí)
Adapter.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
return ds;
}
/// <summary>
/// 執(zhí)行存儲(chǔ)過程,方法不返回結(jié)果集
/// </summary>
/// <param name="storedProcName"></param>
public void RunVoidProcedure(string storedProcName)
{
cmd.CommandText = storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
try
{
this.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.Close();
}
}

/// <summary>
/// 將實(shí)體類的屬性進(jìn)行參數(shù)轉(zhuǎn)換(ORACLE測試通不過,必須要求所有參數(shù)都包含在語句中才行)
/// </summary>
/// <param name="model"></param>
/// <param name="ParaCollect"></param>
//public void ConvertToParameters(object model, DbParameterCollection ParaCollect)
//{
// Type T = model.GetType();
// PropertyInfo[] propert = T.GetProperties();
// for (int i = 0; i < propert.Length; i++)
// {
// AddParam(propert[i].Name, propert[i].GetValue(model, null), ParaCollect);
// }
//}
/// <summary>
/// 將實(shí)體類的屬性進(jìn)行參數(shù)轉(zhuǎn)換
/// </summary>
/// <param name="model"></param>
/// <param name="ParaCollect"></param>
public void ConvertToParameters(object model, DbParameterCollection ParaCollect,List<string> fields)
{
Type T = model.GetType();
PropertyInfo[] propert = T.GetProperties();
for (int i = 0; i < propert.Length; i++)
{
if (fields.Contains(propert[i].Name)) //檢測必須參數(shù)化的實(shí)體屬性
{
AddParam(propert[i].Name, propert[i].GetValue(model, null), ParaCollect);
}
}
}

/// <summary>
/// 通過反射將取出的數(shù)據(jù)寫入實(shí)體類(ORACLE測試通不過,需進(jìn)行類型強(qiáng)制轉(zhuǎn)換)
/// </summary>
/// <param name="model"></param>
/// <param name="cmdText"></param>
//public void GetModel(object model, string cmdText)
//{
// PropertyInfo propertyInfo;
// DbDataReader dr = ExecuteDataReader(conn, cmdText);
// while (dr.Read())
// {
// for (int i = 0; i < dr.FieldCount; i++)
// {
// propertyInfo = model.GetType().GetProperty(dr.GetName(i));
// if (propertyInfo != null)
// {
// if (dr.GetValue(i) != DBNull.Value)
// {
// //Type t = dr.GetValue(i).GetType();
// propertyInfo.SetValue(model, dr.GetValue(i), null);
// }
// }
// }
// }
// dr.Close();
// conn.Close();
//}
/// <summary>
/// 通過反射將數(shù)據(jù)綁定到實(shí)體對象,由于不同數(shù)據(jù)庫對應(yīng)于.NET的數(shù)據(jù)類型不一樣
/// 需做強(qiáng)制類型轉(zhuǎn)換
/// </summary>
/// <param name="model"></param>
/// <param name="cmdText"></param>
public void GetModel(object model, string cmdText)
{
PropertyInfo propertyInfo;
DbDataReader dr = ExecuteDataReader(conn, cmdText);
object _value;
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
propertyInfo = model.GetType().GetProperty(dr.GetName(i));
if (propertyInfo != null && dr.GetValue(i) != DBNull.Value)
{
switch (propertyInfo.PropertyType.ToString())
{
case "System.String":
{
_value = Convert.ToString(dr.GetValue(i));//字符串是全球通用類型,也可以不用轉(zhuǎn)換
propertyInfo.SetValue(model, _value, null);
}break;
case "System.Int32":
{
_value = Convert.ToInt32(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Single":
{
_value = Convert.ToSingle(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Decimal":
{
_value = Convert.ToDecimal(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "System.Double":
{
_value = Convert.ToDouble(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
case "":
{
_value = Convert.ToDateTime(dr.GetValue(i));
propertyInfo.SetValue(model, _value, null);
} break;
default: break;
}
}
}
}
dr.Close();
conn.Close();
}
/// <summary>
/// 根據(jù)不同的數(shù)據(jù)庫命令對象返回該類型數(shù)據(jù)庫參數(shù)的前綴格式化字符串
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
private string GetParameterFormat(DbCommand command)
{
if (!ParametersFormat.ContainsKey(command.GetType()))
{
this.Open();//讀取參數(shù)前綴時(shí)需打開數(shù)據(jù)庫連接
ParametersFormat.Add(
command.GetType(),
command.Connection.GetSchema("DataSourceInformation")
.Rows[0]["ParameterMarkerFormat"].ToString());
//conn.Close();在真正執(zhí)行語句的時(shí)候去關(guān)閉,避免重復(fù)打開
}
return ParametersFormat[command.GetType()];
}
private void Open()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
private void Close()
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
/// <summary>
/// 替換DML語句里的參數(shù)前綴
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string Replace(string str)
{
return str.Replace("$", retParaformat.Substring(0, 1));
}
}
}

文件下載:PeaceHelper.cs

相關(guān)文章

  • ASP.NET2.0 SQL Server數(shù)據(jù)庫連接詳解

    ASP.NET2.0 SQL Server數(shù)據(jù)庫連接詳解

    本文將詳細(xì)介紹如何使用Connection對象連接數(shù)據(jù)庫 。對于不同的.NET 數(shù)據(jù)提供者,ADO.NET采用不同的Connection對象連接數(shù)據(jù)庫。這些Connection對象為我們屏蔽了具體的實(shí)現(xiàn)細(xì)節(jié),并提供了一種統(tǒng)一的實(shí)現(xiàn)方法。
    2009-07-07
  • .net core日志系統(tǒng)相關(guān)總結(jié)

    .net core日志系統(tǒng)相關(guān)總結(jié)

    多年的經(jīng)驗(yàn),日志記錄是軟件開發(fā)的重要組成部分。沒有日志記錄機(jī)制的系統(tǒng)不是完善的系統(tǒng)。在開發(fā)階段可以通過debug附件進(jìn)程進(jìn)行交互調(diào)試,可以檢測到一些問題,但是在上線之后,日志的記錄起到至關(guān)重要的作用。本文講解下日志系統(tǒng)的相關(guān)使用
    2021-06-06
  • asp.net GridView的刪除對話框的兩種方法

    asp.net GridView的刪除對話框的兩種方法

    本來這兩種方法,我已經(jīng)掌握。但是沒有總結(jié),今天朋友突然問題,我竟然想不起來,找了半天,現(xiàn)在亡羊補(bǔ)牢,趕快寫在博客里。
    2009-04-04
  • Asp.net 在三層架構(gòu)中事務(wù)的使用實(shí)例代碼

    Asp.net 在三層架構(gòu)中事務(wù)的使用實(shí)例代碼

    再我知道的.net中,執(zhí)行事務(wù)有兩種方法,一種是自動(dòng)事物,使用起來相當(dāng)簡單,但是需要配置服務(wù)器,如果你用的是web共享主機(jī),即沒有權(quán)限配置自己的服務(wù)器,那就沒必要用這種了,接下了我講下.net中最普通的事務(wù)SqlTransaction
    2012-10-10
  • Mvc動(dòng)態(tài)注冊HttpModule詳解

    Mvc動(dòng)態(tài)注冊HttpModule詳解

    本文主要介紹了Mvc動(dòng)態(tài)注冊HttpModule的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-03-03
  • C# Math.Round()函數(shù)問題

    C# Math.Round()函數(shù)問題

    Math.Round()準(zhǔn)確的說,這個(gè)函數(shù)不是四舍五入,而是四舍六入五湊偶,就是說小于4或大于6的該舍該入是沒有爭議的,而5處在正中間,如果四舍五入則會(huì)造成數(shù)據(jù)的整體偏差,所以采取的原則是:如果舍入位為5,則舍入后最后一位為偶數(shù),這是國際慣例。
    2008-12-12
  • .NET MD5加密解密代碼解析

    .NET MD5加密解密代碼解析

    這篇文章主要為大家詳細(xì)解析了.NET MD5加密解密代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • vs2010制作簡單的asp.net網(wǎng)站

    vs2010制作簡單的asp.net網(wǎng)站

    這篇文章主要介紹了vs2010制作簡單的asp.net網(wǎng)站,只要十步哦,感興趣的小伙伴們可以參考一下
    2015-09-09
  • MVC 5 第二章 MVC5應(yīng)用程序項(xiàng)目結(jié)構(gòu)

    MVC 5 第二章 MVC5應(yīng)用程序項(xiàng)目結(jié)構(gòu)

    通過本章學(xué)習(xí),你將了解到一個(gè)MVC 5應(yīng)用程序的項(xiàng)目組成以及項(xiàng)目文件的相關(guān)信息,從而更好地架構(gòu)設(shè)計(jì)出自己的項(xiàng)目結(jié)構(gòu)。
    2014-06-06
  • ASP.net(C#)從其他網(wǎng)站抓取內(nèi)容并截取有用信息的實(shí)現(xiàn)代碼

    ASP.net(C#)從其他網(wǎng)站抓取內(nèi)容并截取有用信息的實(shí)現(xiàn)代碼

    ASP.net(C#)從其他網(wǎng)站抓取內(nèi)容并截取有用信息的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2011-09-09

最新評論

最新中文字幕乱码在线| 一区二区麻豆传媒黄片| 蜜臀成人av在线播放| 337p日本大胆欧美人| 久久精品国产23696| av在线播放国产不卡| ka0ri在线视频| av网址国产在线观看| 日韩欧美亚洲熟女人妻| 2020中文字幕在线播放| 最新国产精品拍在线观看| 日本女大学生的黄色小视频| 亚洲欧美激情国产综合久久久| 男人天堂最新地址av| 六月婷婷激情一区二区三区| 色狠狠av线不卡香蕉一区二区| 女同性ⅹxx女同h偷拍| 美女av色播在线播放| 国产精品久久久久久久女人18| 青娱乐在线免费视频盛宴| ka0ri在线视频| 在线不卡日韩视频播放| 新97超碰在线观看| 中文字幕一区二 区二三区四区| 97少妇精品在线观看| 中文字幕无码日韩专区免费| 午夜在线观看一区视频| 亚洲av自拍天堂网| 日本真人性生活视频免费看| 日本高清成人一区二区三区 | 9久在线视频只有精品| 欧美xxx成人在线| 丰满的继坶3中文在线观看| 免费在线看的黄片视频| 美女av色播在线播放| 五十路息与子猛烈交尾视频| 亚洲中文字幕国产日韩| 很黄很污很色的午夜网站在线观看| 免费男阳茎伸入女阳道视频| 中出中文字幕在线观看| 成人网18免费视频版国产| lutube在线成人免费看| 国产成人无码精品久久久电影| 午夜影院在线观看视频羞羞羞| 婷婷午夜国产精品久久久| 国产精品久久久久网| 亚洲美女自偷自拍11页| 伊人成人综合开心网| 国产一区二区神马久久| 亚洲嫩模一区二区三区| av网站色偷偷婷婷网男人的天堂| 肏插流水妹子在线乐播下载| 又粗又长 明星操逼小视频| 可以在线观看的av中文字幕| 2021年国产精品自拍| 亚洲粉嫩av一区二区三区| 日本高清在线不卡一区二区| 亚洲午夜伦理视频在线| 丝袜亚洲另类欧美变态| 神马午夜在线观看视频| 精品美女在线观看视频在线观看| 亚洲天天干 夜夜操| 99精品国产免费久久| 自拍偷拍 国产资源| 中文字幕日韩精品日本| 精品欧美一区二区vr在线观看 | 2020中文字幕在线播放| 亚洲人人妻一区二区三区| 中文字幕 人妻精品| 一级黄片大鸡巴插入美女| 久精品人妻一区二区三区| 国产极品精品免费视频| 成熟熟女国产精品一区| 成人sm视频在线观看| 伊人成人综合开心网| 深田咏美亚洲一区二区| 国产在线91观看免费观看| 老司机欧美视频在线看| 丰满的子国产在线观看| 久久久人妻一区二区| 91色九色porny| 超级av免费观看一区二区三区| 综合精品久久久久97| 一区二区免费高清黄色视频| 亚洲午夜福利中文乱码字幕| 成人高清在线观看视频| 亚洲国产成人av在线一区| 色吉吉影音天天干天天操 | 亚洲国产精品中文字幕网站| 夏目彩春在线中文字幕| 福利视频一区二区三区筱慧| 国产综合高清在线观看| 国产成人精品福利短视频| 成年人午夜黄片视频资源| 国产福利小视频二区| 精品人妻一二三区久久| 在线国产精品一区二区三区| 欧美激情精品在线观看| 天天插天天色天天日| 成人免费做爰高潮视频| 99热色原网这里只有精品| 日本熟妇一区二区x x| 免费黄色成人午夜在线网站| 青青青aaaa免费| 欧美成一区二区三区四区| 美女av色播在线播放| 国产中文精品在线观看| 99久久99久国产黄毛片| 97少妇精品在线观看| 中文字幕第三十八页久久| 同居了嫂子在线播高清中文| 99热久久极品热亚洲| 国产乱子伦一二三区| 国产精品sm调教视频| 欧美黑人与人妻精品| 日韩欧美一级黄片亚洲| 国产福利在线视频一区| 亚洲高清国产一区二区三区| 亚国产成人精品久久久| 偷青青国产精品青青在线观看 | 日韩伦理短片在线观看| 99精品国产免费久久| 色哟哟在线网站入口| 欧美成人综合视频一区二区| 久久久久久久精品老熟妇| 欧美日韩激情啪啪啪| 一区二区三区精品日本| 国产又粗又黄又硬又爽| 99热99re在线播放| 深田咏美亚洲一区二区| 精品一区二区三区欧美| 5528327男人天堂| 日本高清成人一区二区三区| 老司机免费福利视频网| 午夜dv内射一区区| 亚洲国产在线精品国偷产拍| 1000小视频在线| 亚洲Av无码国产综合色区| 成人性爱在线看四区| 五月天色婷婷在线观看视频免费| 国产亚洲视频在线观看| 成年人该看的视频黄免费| sspd152中文字幕在线| 国产日韩欧美美利坚蜜臀懂色| 亚洲欧美日韩视频免费观看| 狠狠躁夜夜躁人人爽天天久天啪| 蜜桃专区一区二区在线观看| 成人久久精品一区二区三区 | 视频在线亚洲一区二区| 亚洲一区二区人妻av| 国产中文精品在线观看| 可以在线观看的av中文字幕| 免费高清自慰一区二区三区网站 | 欧美日韩激情啪啪啪 | 中文字幕av第1页中文字幕| 国产揄拍高清国内精品对白| 国产va在线观看精品| 青青青青草手机在线视频免费看| 国产福利在线视频一区| 国产91精品拍在线观看| 亚洲人一区二区中文字幕| 国产午夜男女爽爽爽爽爽视频| 伊人开心婷婷国产av| 在线观看视频 你懂的| 91chinese在线视频| 亚洲天堂有码中文字幕视频| 五十路熟女av天堂| 亚洲公开视频在线观看| 亚洲午夜精品小视频| 亚洲人妻av毛片在线| 欧美精品资源在线观看| 亚洲综合色在线免费观看| 午夜在线观看岛国av,com| 好吊操视频这里只有精品| 无码中文字幕波多野不卡| 美女 午夜 在线视频| mm131美女午夜爽爽爽| 91chinese在线视频| 国产不卡av在线免费| 中文人妻AV久久人妻水| 国产黄色高清资源在线免费观看| 中文字幕+中文字幕| 久久久久91精品推荐99| 亚洲av男人天堂久久| 中国把吊插入阴蒂的视频| 欧美日韩亚洲国产无线码| 在线免费观看av日韩| 97黄网站在线观看| 亚洲福利天堂久久久久久| 日本男女操逼视频免费看 | 免费黄高清无码国产| 亚洲久久午夜av一区二区| 亚洲欧美综合在线探花| 人妻爱爱 中文字幕| 一区二区三区日本伦理| 日韩av有码中文字幕| 日本性感美女写真视频| 国产va精品免费观看| 成人综合亚洲欧美一区| 在线观看欧美黄片一区二区三区| 精品人人人妻人人玩日产欧| 2020中文字幕在线播放| 92福利视频午夜1000看| 亚洲欧美日韩视频免费观看| 99精品免费观看视频| tube69日本少妇| 亚洲推理片免费看网站| 国产一级精品综合av| 狍和女人的王色毛片| 精内国产乱码久久久久久| 视频一区二区三区高清在线| 亚洲国产免费av一区二区三区| 黑人巨大精品欧美视频| 人妻最新视频在线免费观看| 日韩av中文在线免费观看| 中文字幕日韩精品就在这里| 免费av岛国天堂网站| 亚洲麻豆一区二区三区| 亚洲成人av一区久久| 免费观看理论片完整版| 亚洲成人av在线一区二区| 天天做天天爽夜夜做少妇| 精品久久婷婷免费视频| 在线观看免费岛国av| 午夜影院在线观看视频羞羞羞| 果冻传媒av一区二区三区| 国产精品一区二区久久久av| 91p0rny九色露脸熟女| 日韩av大胆在线观看| 精品成人午夜免费看| 四川五十路熟女av| 一区二区三区四区视频| 99re久久这里都是精品视频| 亚洲激情,偷拍视频| 免费十精品十国产网站| 在线观看日韩激情视频| 色av色婷婷人妻久久久精品高清 | 伊人综合aⅴ在线网| 中文字幕中文字幕 亚洲国产| 果冻传媒av一区二区三区 | 亚洲av成人网在线观看| 91老师蜜桃臀大屁股| 亚洲狠狠婷婷综合久久app| 国产精品三级三级三级| 亚洲国产美女一区二区三区软件| 日本高清撒尿pissing| 狠狠地躁夜夜躁日日躁| 精产国品久久一二三产区区别| 中文字幕第一页国产在线| 男人在床上插女人视频| 亚洲av极品精品在线观看| 婷婷久久久综合中文字幕| 欧美日韩不卡一区不区二区| 男生舔女生逼逼的视频| 欧美3p在线观看一区二区三区| 欧美亚洲国产成人免费在线 | 亚洲av日韩高清hd| 国产伊人免费在线播放| 中文字幕在线免费第一页| 黄色av网站免费在线| 黄片色呦呦视频免费看| 国产精品久久久久国产三级试频| 久久美欧人妻少妇一区二区三区| 欧美偷拍亚洲一区二区| 午夜精品一区二区三区城中村| a v欧美一区=区三区| 五月天久久激情视频| 视频一区二区综合精品| 99久久超碰人妻国产| 午夜福利资源综合激情午夜福利资| 爱爱免费在线观看视频| 伊人开心婷婷国产av| 天天做天天爽夜夜做少妇| 色综合久久无码中文字幕波多| 一区二区视频视频视频| 黄色的网站在线免费看| 五月激情婷婷久久综合网| 人妻少妇精品久久久久久| 搡老妇人老女人老熟女| 亚洲 中文 自拍 无码| 久碰精品少妇中文字幕av| 日本裸体熟妇区二区欧美| 青青青青青青青青青青草青青| 偷拍自拍亚洲视频在线观看| 天天通天天透天天插| 在线免费91激情四射| 亚洲成人免费看电影| 免费观看丰满少妇做受| 青青青青青免费视频| 欧美久久久久久三级网| 久久久久久久久久久久久97| 亚国产成人精品久久久| 免费国产性生活视频| 岛国青草视频在线观看| 午夜激情高清在线观看| 精品视频一区二区三区四区五区| 一区二区在线观看少妇| 日日操夜夜撸天天干| 亚洲av黄色在线网站| 337p日本大胆欧美人| 中文字幕—97超碰网| 亚洲欧美国产综合777| 精品亚洲在线免费观看| 91天堂天天日天天操| 国产伊人免费在线播放| 日韩不卡中文在线视频网站| 美女吃鸡巴操逼高潮视频| 天天干天天操天天玩天天射| 日韩美在线观看视频黄| 夏目彩春在线中文字幕| 国产白嫩美女一区二区| 亚洲av日韩精品久久久久久hd| 1区2区3区4区视频在线观看| av在线免费观看亚洲天堂| 久久久久久久一区二区三| 在线播放国产黄色av| 天天干天天操天天摸天天射| 日韩欧美国产一区不卡| 国产使劲操在线播放| 亚洲老熟妇日本老妇| 色综合久久五月色婷婷综合| rct470中文字幕在线| 国产午夜福利av导航 | 最新黄色av网站在线观看| 人妻久久久精品69系列| 亚洲国产欧美一区二区三区…| 91国产资源在线视频| www天堂在线久久| 久久这里只有精品热视频| 国语对白xxxx乱大交| 国产在线观看免费人成短视频| 91色九色porny| 熟女国产一区亚洲中文字幕| 99精品国产自在现线观看| 大胆亚洲av日韩av| 人妻3p真实偷拍一二区| 亚洲综合在线观看免费| 曰本无码人妻丰满熟妇啪啪| av中文字幕福利网| 成人精品在线观看视频| 红桃av成人在线观看| 欧美黑人性猛交xxxxⅹooo| av手机在线观播放网站| 欧美亚洲中文字幕一区二区三区| 久久精品国产999| av久久精品北条麻妃av观看| 亚洲av无硬久久精品蜜桃| 午夜精品九一唐人麻豆嫩草成人| 亚洲 欧美 自拍 偷拍 在线| 天天干夜夜操天天舔| 天天操天天插天天色| 青青青青青操视频在线观看| 少妇人妻二三区视频| 国产精品污污污久久| 亚洲精品av在线观看| 2022精品久久久久久中文字幕| 在线观看日韩激情视频| jiujiure精品视频在线| 亚洲国产成人在线一区| 欧美熟妇一区二区三区仙踪林| 亚洲精品一区二区三区老狼| 综合一区二区三区蜜臀| AV无码一区二区三区不卡| 日韩欧美一级aa大片| 国产露脸对白在线观看| 91精品国产黑色丝袜| 青青青aaaa免费| 日本免费一级黄色录像| 亚洲精品中文字幕下载| 99精品视频之69精品视频| 好吊视频—区二区三区| 57pao国产一区二区| 2020av天堂网在线观看| 亚洲熟女女同志女同| 老司机福利精品视频在线| 人妻在线精品录音叫床| 亚洲欧美色一区二区| 韩国三级aaaaa高清视频| 啊啊好大好爽啊啊操我啊啊视频| 亚洲av可乐操首页| 久久久久久国产精品| 中文字幕第一页国产在线| 中国产一级黄片免费视频播放| 中文字幕人妻av在线观看| 国产欧美精品不卡在线| 中文字幕综合一区二区| 大香蕉伊人国产在线| 高潮视频在线快速观看国家快速| 91国产在线视频免费观看| 一区二区三区av高清免费| 久草视频在线看免费| 亚洲av极品精品在线观看| 大鸡吧插逼逼视频免费看 | 久久久久五月天丁香社区| 亚洲av成人免费网站| 99精品国产免费久久| 欧美日韩不卡一区不区二区| 国产日韩精品电影7777| 激情综合治理六月婷婷| 天天干天天日天天干天天操| 日本性感美女视频网站| 亚洲熟妇久久无码精品| 国产卡一卡二卡三乱码手机| 亚洲av可乐操首页| 日韩欧美制服诱惑一区在线| 亚洲午夜高清在线观看| 97超碰人人搞人人| 午夜影院在线观看视频羞羞羞| 青青青青操在线观看免费| 久久精品亚洲成在人线a| 丰满的继坶3中文在线观看| 亚洲成人国产av在线| 精品91高清在线观看| 亚洲国产成人av在线一区| 日韩a级精品一区二区| 偷拍自拍视频图片免费| 国产精品午夜国产小视频| 国产午夜男女爽爽爽爽爽视频| 中文亚洲欧美日韩无线码| 亚洲av人人澡人人爽人人爱| 蜜桃专区一区二区在线观看| 亚洲综合乱码一区二区| 狠狠躁夜夜躁人人爽天天天天97| 在线视频国产欧美日韩| 美女福利视频导航网站 | 人妻最新视频在线免费观看| 韩国亚洲欧美超一级在线播放视频 | 加勒比视频在线免费观看| 国产麻豆剧果冻传媒app| 久久机热/这里只有| 福利国产视频在线观看| 久久亚洲天堂中文对白| 欧美另类重口味极品在线观看| 天天干天天操天天扣| 日韩欧美一级aa大片| 亚洲护士一区二区三区| 激情图片日韩欧美人妻| 综合激情网激情五月五月婷婷| 天天日天天鲁天天操| 欧美一区二区中文字幕电影| 嫩草aⅴ一区二区三区| 青青草原网站在线观看| 欧美老鸡巴日小嫩逼| 日日日日日日日日夜夜夜夜夜夜| 久久永久免费精品人妻专区| 91天堂天天日天天操| 国产91嫩草久久成人在线视频| 家庭女教师中文字幕在线播放| 97瑟瑟超碰在线香蕉| 亚洲综合一区二区精品久久| 插小穴高清无码中文字幕| 天天色天天操天天舔| 91超碰青青中文字幕| 一区二区三区日韩久久| 免费成人av中文字幕| 91麻豆精品传媒国产黄色片| 男女啪啪视频免费在线观看| 国产在线免费观看成人| 日本少妇精品免费视频| 大香蕉日本伊人中文在线| 欧美日韩激情啪啪啪| 人人妻人人爽人人澡人人精品| 国产精品久久综合久久| 亚洲欧美福利在线观看| 91国产在线免费播放| 福利国产视频在线观看| 人妻丰满熟妇综合网| 国产麻豆国语对白露脸剧情 | 国产美女精品福利在线| 欧美精品 日韩国产| 超碰97人人澡人人| 日本免费午夜视频网站| 成人影片高清在线观看| 青青草在观免费国产精品| 超碰在线观看免费在线观看| 好吊视频—区二区三区| jiujiure精品视频在线| 成人蜜臀午夜久久一区| 超碰中文字幕免费观看| 动色av一区二区三区| 人妻少妇中文有码精品| 中文人妻AV久久人妻水| 男人操女人逼逼视频网站| gogo国模私拍视频| 水蜜桃一区二区三区在线观看视频 | 老司机福利精品免费视频一区二区 | 欧美男人大鸡吧插女人视频| 在线视频自拍第三页| 亚洲欧美另类手机在线| 55夜色66夜色国产精品站| 狠狠躁狠狠爱网站视频 | 成熟熟女国产精品一区| 欧美偷拍自拍色图片| 涩爱综合久久五月蜜臀| 日韩欧美一级精品在线观看| 国产黄网站在线观看播放| 美女骚逼日出水来了| 欧美另类z0z变态| 777奇米久久精品一区| 国产美女一区在线观看| 我想看操逼黄色大片| 国产一级麻豆精品免费| 日韩亚洲高清在线观看| 亚洲1069综合男同| rct470中文字幕在线| 成人30分钟免费视频| 国产精品久久久久久美女校花| av日韩在线免费播放| 在线观看视频 你懂的| 天堂av在线播放免费| 亚洲av在线观看尤物| 自拍偷拍日韩欧美亚洲| 亚洲精品高清自拍av | 美女在线观看日本亚洲一区| 91麻豆精品秘密入口在线观看| 99婷婷在线观看视频| 亚洲第一黄色在线观看| 青青草亚洲国产精品视频| a v欧美一区=区三区| 成人亚洲精品国产精品| 青青青青视频在线播放| 欧洲亚洲欧美日韩综合| 日本精品美女在线观看| 国产va精品免费观看| 在线国产中文字幕视频| 操的小逼流水的文章| 爆乳骚货内射骚货内射在线| av在线观看网址av| 中文字幕在线第一页成人| 都市激情校园春色狠狠| 香蕉91一区二区三区| 韩国爱爱视频中文字幕| 首之国产AV医生和护士小芳| 久久精品国产23696| 综合精品久久久久97| 岛国av高清在线成人在线| 亚洲免费视频欧洲免费视频| 国产精品视频男人的天堂| 日本裸体熟妇区二区欧美| 欧美精品中文字幕久久二区| 绝顶痉挛大潮喷高潮无码| 人妻无码色噜噜狠狠狠狠色| 亚洲欧洲一区二区在线观看| 日曰摸日日碰夜夜爽歪歪| 中文字幕日韩精品日本| 2021最新热播中文字幕| 欧美精品 日韩国产| 夜色福利视频在线观看| 国产亚洲成人免费在线观看| 天天日天天摸天天爱| 91精品国产高清自在线看香蕉网| 国产91久久精品一区二区字幕| 成人伊人精品色xxxx视频| 日韩二区视频一线天婷婷五| 亚洲成人情色电影在线观看| 最新欧美一二三视频| 国产欧美精品免费观看视频| 久久永久免费精品人妻专区 | 日韩激情文学在线视频| 老司机免费福利视频网| 午夜在线观看一区视频| 亚洲视频乱码在线观看| 午夜在线观看一区视频| 日韩精品激情在线观看| 日本裸体熟妇区二区欧美| 加勒比视频在线免费观看| 在线网站你懂得老司机| 国产露脸对白在线观看| 国产视频精品资源网站| 视频久久久久久久人妻| 蜜臀av久久久久蜜臀av麻豆| 啊用力插好舒服视频| 亚洲一区二区三区久久受 | 伊人情人综合成人久久网小说| 青青青青青青青在线播放视频| 日韩中文字幕在线播放第二页| 丰满少妇翘臀后进式| 自拍偷拍,中文字幕| 亚洲国产免费av一区二区三区| 亚洲色偷偷综合亚洲AV伊人| 国产午夜福利av导航| 天堂av中文在线最新版| 免费岛国喷水视频在线观看| 热99re69精品8在线播放| 成人福利视频免费在线| 88成人免费av网站| 国产亚洲天堂天天一区| 成人乱码一区二区三区av| 韩国女主播精品视频网站| av一区二区三区人妻| 欧美aa一级一区三区四区| 老鸭窝在线观看一区| 午夜青青草原网在线观看| 一区二区视频在线观看视频在线| 日韩美女搞黄视频免费| 天天色天天舔天天射天天爽| 亚洲午夜精品小视频| 在线网站你懂得老司机| av森泽佳奈在线观看| 精品国产高潮中文字幕| 人妻激情图片视频小说| 中文字幕av一区在线观看| 亚洲一区久久免费视频| 久久久久久久久久久久久97| 亚洲人妻视频在线网| 又粗又长 明星操逼小视频| 国产精品人妻一区二区三区网站| 无套猛戳丰满少妇人妻| tube69日本少妇| 国产高清在线在线视频| chinese国产盗摄一区二区| 97精品视频在线观看| 2021久久免费视频| 日韩av中文在线免费观看| 国产精品3p和黑人大战| 精品美女久久久久久| 97人妻无码AV碰碰视频| 亚洲另类图片蜜臀av| 91精品国产91青青碰| 青青青青视频在线播放| 欧美专区第八页一区在线播放| 国产精品国产三级国产午| 亚洲av天堂在线播放| 在线亚洲天堂色播av电影| 一区二区麻豆传媒黄片| 国产精品成久久久久三级蜜臀av| 亚洲欧美人精品高清| 粉嫩av懂色av蜜臀av| 亚洲乱码中文字幕在线| 岛国毛片视频免费在线观看| 韩国一级特黄大片做受| 777奇米久久精品一区| 中文人妻AV久久人妻水| 在线播放国产黄色av| 中英文字幕av一区| 69精品视频一区二区在线观看| 在线视频自拍第三页| av天堂加勒比在线| 中文亚洲欧美日韩无线码| 国产成人自拍视频播放| 国产精品国产三级麻豆| 偷拍自拍亚洲美腿丝袜| yellow在线播放av啊啊啊| 成人精品视频99第一页| 中国黄色av一级片| 三级av中文字幕在线观看| 欧美精产国品一二三区| 中文字幕+中文字幕| 欧美另类z0z变态| 欧美特级特黄a大片免费| 天天日天天操天天摸天天舔| 国产又粗又黄又硬又爽| 国产视频一区二区午夜| av天堂加勒比在线| 天天爽夜夜爽人人爽QC| 人妻最新视频在线免费观看| 亚洲中文字幕校园春色| 亚洲福利精品福利精品福利| 久久这里只有精品热视频| 亚洲精品 欧美日韩| 在线观看国产网站资源| 青青青青草手机在线视频免费看 | 521精品视频在线观看| 色综合久久五月色婷婷综合| 婷婷五月亚洲综合在线| 3D动漫精品啪啪一区二区下载| 国产1区,2区,3区| 97精品成人一区二区三区| 中文字幕人妻一区二区视频| 护士特殊服务久久久久久久| 欧美xxx成人在线| 在线制服丝袜中文字幕| 非洲黑人一级特黄片| 偷拍自拍福利视频在线观看| 欧美成人精品欧美一级黄色| 99久久中文字幕一本人| 少妇与子乱在线观看| 99精品国产自在现线观看| 亚洲天天干 夜夜操| 97小视频人妻一区二区| 午夜国产福利在线观看| 日本美女性生活一级片| 狠狠躁狠狠爱网站视频| 人妻少妇精品久久久久久| 国产精品一区二区三区蜜臀av | 天天日天天操天天摸天天舔| 天天做天天干天天操天天射| 免费看高清av的网站| 亚洲免费在线视频网站| 91chinese在线视频| 久久久噜噜噜久久熟女av| 精品乱子伦一区二区三区免费播 | 在线国产精品一区二区三区| 国产亚洲视频在线观看| 国产一级精品综合av| 午夜在线精品偷拍一区二| 亚洲中文精品字幕在线观看 | 久久久久五月天丁香社区| 免费观看成年人视频在线观看| 2020国产在线不卡视频| 国产在线观看黄色视频| 青青色国产视频在线| 青青青青在线视频免费观看| 天天色天天舔天天射天天爽| 欧美久久久久久三级网| 天天日天天玩天天摸| 精品人人人妻人人玩日产欧| 五十路人妻熟女av一区二区| 国产精品日韩欧美一区二区| 精品久久久久久久久久久a√国产| 成人高潮aa毛片免费| 57pao国产一区二区| 亚洲欧美福利在线观看| 亚洲国产欧美一区二区丝袜黑人| 国产女人露脸高潮对白视频| 黄色三级网站免费下载| 91九色porny国产蝌蚪视频| 五色婷婷综合狠狠爱| 亚洲国产成人av在线一区| 国产视频一区二区午夜| 国产刺激激情美女网站| 日韩三级电影华丽的外出| 中国熟女@视频91| 欧洲国产成人精品91铁牛tv| 这里有精品成人国产99| 欧美少妇性一区二区三区| 免费大片在线观看视频网站| 91麻豆精品久久久久| 黑人借宿ntr人妻的沦陷2| 97黄网站在线观看| 成人免费毛片aaaa| heyzo蜜桃熟女人妻| 2020韩国午夜女主播在线| 福利午夜视频在线观看| 9色精品视频在线观看| 欧美一区二区三区在线资源 | 亚洲 欧美 精品 激情 偷拍| 人妻少妇精品久久久久久| 91大神福利视频网| 蜜桃视频在线欧美一区| 中文字幕AV在线免费看 | 久久国产精品精品美女| 欧洲欧美日韩国产在线| av网址国产在线观看| 天天操天天干天天插| 亚洲少妇高潮免费观看| 五月婷婷在线观看视频免费| 老司机99精品视频在线观看| 人人人妻人人澡人人| 欧美美女人体视频一区| 亚洲成人av一区久久| 极品性荡少妇一区二区色欲| 伊人成人综合开心网| 亚洲国产精品免费在线观看| 欧美偷拍自拍色图片| weyvv5国产成人精品的视频| 天天操天天干天天艹| 国产精品免费不卡av| 亚洲最大黄了色网站| 性欧美日本大妈母与子| 天天干天天操天天扣| 国产精品久久久久国产三级试频| 亚洲国产第一页在线观看| japanese五十路熟女熟妇| 一区二区三区日韩久久| 北条麻妃av在线免费观看| 国产av福利网址大全| 蜜桃色婷婷久久久福利在线| 国产91久久精品一区二区字幕| 亚洲嫩模一区二区三区| 午夜影院在线观看视频羞羞羞| 亚洲区美熟妇久久久久| 人妻自拍视频中国大陆| 在线观看亚洲人成免费网址| 蜜臀av久久久久蜜臀av麻豆| 毛片一级完整版免费| 欧美特色aaa大片| 国产乱子伦精品视频潮优女| 2022精品久久久久久中文字幕| 天天摸天天日天天操| 亚洲国产40页第21页| 啊用力插好舒服视频| 欧美精品国产综合久久| 国产成人小视频在线观看无遮挡| 国产黄色大片在线免费播放| 精品黑人一区二区三区久久国产| 瑟瑟视频在线观看免费视频| 夜夜操,天天操,狠狠操| 国产视频在线视频播放| 青娱乐蜜桃臀av色| 日本五十路熟新垣里子| 亚洲日产av一区二区在线| 99久久成人日韩欧美精品| 93精品视频在线观看| 成人30分钟免费视频| 欧美黑人性暴力猛交喷水| 国产精品女邻居小骚货| av大全在线播放免费| 日本熟女50视频免费| 美女少妇亚洲精选av| 久久精品久久精品亚洲人| 孕妇奶水仑乱A级毛片免费看| 国产一区自拍黄视频免费观看| japanese日本熟妇另类| 国产精品中文av在线播放 | 欧美专区第八页一区在线播放| 91av中文视频在线| 无码精品一区二区三区人| 中国黄片视频一区91| 在线视频精品你懂的| 动漫精品视频在线观看| 天天射夜夜操狠狠干| 香港一级特黄大片在线播放 | 在线免费观看av日韩| 75国产综合在线视频| 五十路人妻熟女av一区二区| 日本高清成人一区二区三区| 精品一区二区三四区| 国产午夜亚洲精品麻豆| 九一传媒制片厂视频在线免费观看| 国产日本精品久久久久久久| 日韩剧情片电影在线收看| 欧美美女人体视频一区| 99久久中文字幕一本人| 成人av免费不卡在线观看| 一区二区久久成人网| 欧美第一页在线免费观看视频| 国产卡一卡二卡三乱码手机| 久草视频中文字幕在线观看| 11久久久久久久久久久| 国产剧情演绎系列丝袜高跟| 激情内射在线免费观看| 99久久久无码国产精品性出奶水| 亚洲精品国产在线电影| 玖玖一区二区在线观看| 精品一线二线三线日本| 欧美偷拍自拍色图片| 夜色撩人久久7777| 日韩中文字幕精品淫| 亚洲高清国产一区二区三区| 鸡巴操逼一级黄色气| 亚洲精品国品乱码久久久久| 久久永久免费精品人妻专区| 亚国产成人精品久久久| 午夜毛片不卡免费观看视频| 国产变态另类在线观看| 岛国青草视频在线观看| 精品国产高潮中文字幕| 国产精品黄片免费在线观看| 男女啪啪视频免费在线观看| 国产又粗又猛又爽又黄的视频在线 | av老司机亚洲一区二区| 国产乱子伦精品视频潮优女| 任我爽精品视频在线播放| 成人久久精品一区二区三区| 一区二区三区的久久的蜜桃的视频| 人人在线视频一区二区| 爆乳骚货内射骚货内射在线 | 啊用力插好舒服视频| 中字幕人妻熟女人妻a62v网| 最新97国产在线视频| 色av色婷婷人妻久久久精品高清 | 91破解版永久免费| 91免费观看在线网站| 在线国产日韩欧美视频| 91麻豆精品91久久久久同性| 热思思国产99re| 日曰摸日日碰夜夜爽歪歪| 97欧洲一区二区精品免费| 欧美日韩国产一区二区三区三州 | okirakuhuhu在线观看| 国产在线自在拍91国语自产精品| 成人综合亚洲欧美一区| 大白屁股精品视频国产| 亚洲护士一区二区三区| 狠狠鲁狠狠操天天晚上干干| 换爱交换乱高清大片| 天堂v男人视频在线观看| 黄色片黄色片wyaa| 黑人大几巴狂插日本少妇| 天天日天天爽天天干| yy6080国产在线视频| 亚洲福利天堂久久久久久| 伊人综合aⅴ在线网| 绯色av蜜臀vs少妇| 天天操天天干天天日狠狠插| 黄色资源视频网站日韩| 国产亚洲国产av网站在线| 2022天天干天天操| 一区二区三区麻豆福利视频| 青青青青青青青青青国产精品视频| 77久久久久国产精产品| aⅴ精产国品一二三产品| 美洲精品一二三产区区别| 青青热久免费精品视频在线观看| 无码中文字幕波多野不卡| 免费看国产又粗又猛又爽又黄视频| 国产精品人妻66p| 337p日本大胆欧美人| 青青青国产免费视频| 99热久久这里只有精品8| 欧美精品欧美极品欧美视频| 毛片一级完整版免费| 成人福利视频免费在线| 爱有来生高清在线中文字幕| 孕妇奶水仑乱A级毛片免费看| 福利视频网久久91| 国产麻豆91在线视频| 天天干夜夜操啊啊啊| 亚洲一区二区三区偷拍女厕91| 欧美亚洲中文字幕一区二区三区| 中文字幕,亚洲人妻| 精品美女久久久久久| 骚逼被大屌狂草视频免费看| 国产三级片久久久久久久| 亚洲综合另类精品小说| 日韩一区二区电国产精品| 亚洲激情,偷拍视频| 中文字幕日本人妻中出| 骚逼被大屌狂草视频免费看| 午夜精品亚洲精品五月色| 亚洲一区二区久久久人妻| 熟女人妻在线观看视频| 日本人妻欲求不满中文字幕| 男人的天堂av日韩亚洲| 青青青青青青青青青国产精品视频| 大香蕉玖玖一区2区| 精品一区二区三区三区88 | 在线观看av亚洲情色| 国产欧美日韩第三页| 快点插进来操我逼啊视频| 亚洲国产欧美一区二区三区…| 精品美女久久久久久| 99热这里只有精品中文| 亚洲蜜臀av一区二区三区九色| 午夜dv内射一区区| 日韩激情文学在线视频| 521精品视频在线观看| 青春草视频在线免费播放| 好太好爽好想要免费| 欧美男人大鸡吧插女人视频| 亚洲超碰97人人做人人爱| 1024久久国产精品| 人妻久久久精品69系列| av中文字幕电影在线看| aⅴ精产国品一二三产品| 新婚人妻聚会被中出| 97精品综合久久在线| 日韩av免费观看一区| 男人天堂最新地址av| 天天夜天天日天天日| 蜜臀av久久久久蜜臀av麻豆| 国产自拍黄片在线观看| 国产剧情演绎系列丝袜高跟| 都市家庭人妻激情自拍视频| 91久久国产成人免费网站| 女蜜桃臀紧身瑜伽裤| 99视频精品全部15| 亚洲熟色妇av日韩熟色妇在线| 久久热这里这里只有精品| av久久精品北条麻妃av观看| 日本一二三中文字幕| 欧美精品免费aaaaaa| 真实国模和老外性视频| 人妻丝袜榨强中文字幕| 丝袜美腿视频诱惑亚洲无| 性生活第二下硬不起来| 91www一区二区三区| 亚洲成人国产综合一区| 播放日本一区二区三区电影| av在线免费资源站| 九色视频在线观看免费| 啪啪啪18禁一区二区三区| 国产又色又刺激在线视频| 国产成人自拍视频播放| 在线免费观看欧美小视频| 亚洲天堂有码中文字幕视频| 漂亮 人妻被中出中文| 亚洲成人午夜电影在线观看| 久久机热/这里只有| 免费一级黄色av网站| 成年午夜影片国产片| 国产三级影院在线观看| 亚洲青青操骚货在线视频| 人妻丝袜诱惑我操她视频| 天天干天天操天天摸天天射| 丰满少妇翘臀后进式| 精品人妻伦一二三区久| 国产精品污污污久久| 2o22av在线视频| 狠狠的往里顶撞h百合| 大尺度激情四射网站| 免费无码人妻日韩精品一区二区 | 国产性生活中老年人视频网站| 欧美一区二区三区四区性视频| 9l人妻人人爽人人爽| 国产男女视频在线播放| 久久机热/这里只有| 在线播放国产黄色av| 性欧美日本大妈母与子| brazzers欧熟精品系列| 欧洲欧美日韩国产在线| 欧美日韩熟女一区二区三区| 熟女91pooyn熟女| 蜜桃久久久久久久人妻| 国产老熟女伦老熟妇ⅹ| 国产福利小视频免费观看| 青青草原色片网站在线观看| 丰满的继坶3中文在线观看| 国产精品视频资源在线播放 | 超pen在线观看视频公开97| 久久久91蜜桃精品ad| 成人av免费不卡在线观看| 性欧美激情久久久久久久| 免费69视频在线看| 97超碰人人搞人人| 超碰97人人澡人人| 最新97国产在线视频| 人妻最新视频在线免费观看| 大肉大捧一进一出好爽在线视频| 夏目彩春在线中文字幕| 天天操天天操天天碰| 中文字幕 亚洲av| 日本黄在免费看视频| 久久这里只有精品热视频| 国产亚洲成人免费在线观看| 91老师蜜桃臀大屁股| 一区二区久久成人网| 精品高跟鞋丝袜一区二区| 亚洲一区二区三区在线高清| 熟妇一区二区三区高清版| 国产91久久精品一区二区字幕| 精品久久久久久久久久久a√国产| 亚洲一级特黄特黄黄色录像片| 日韩美av高清在线| 亚洲人妻30pwc| 日韩欧美中文国产在线| 日本一二三中文字幕| 午夜蜜桃一区二区三区| 激情人妻校园春色亚洲欧美 | 丰满少妇人妻xxxxx| 999久久久久999| 成人伊人精品色xxxx视频| 中文字幕高清在线免费播放| 人妻少妇亚洲精品中文字幕| 搡老熟女一区二区在线观看| 在线免费观看日本伦理| 国产熟妇一区二区三区av| 黄色中文字幕在线播放| 欧美精产国品一二三产品区别大吗| 国产一区二区视频观看| 免费手机黄页网址大全| 天天日天天透天天操| 在线观看av观看av| 日韩伦理短片在线观看| 最新中文字幕免费视频| 国内精品在线播放第一页| 超碰中文字幕免费观看| 天美传媒mv视频在线观看| 夜夜嗨av蜜臀av| 天天干天天搞天天摸| 韩国女主播精品视频网站| 91九色porny蝌蚪国产成人| 国产清纯美女al在线| 亚洲精品中文字幕下载| 精品少妇一二三视频在线| 中文字日产幕乱六区蜜桃| 午夜福利资源综合激情午夜福利资 | 日韩中文字幕精品淫| 国产极品精品免费视频 | 久久久精品欧洲亚洲av| 国产视频网站国产视频| 国产一区二区久久久裸臀| 91chinese在线视频| 亚洲综合一区二区精品久久| 97人人妻人人澡人人爽人人精品| 免费无码人妻日韩精品一区二区| 亚洲中文字字幕乱码| 亚洲av日韩精品久久久久久hd| 成人国产影院在线观看| 欧美成人精品欧美一级黄色| 日韩av大胆在线观看| 99热国产精品666| 2022中文字幕在线| 日韩激情文学在线视频| av中文字幕在线观看第三页| jiujiure精品视频在线| 亚洲中文字幕乱码区| 欧美精品久久久久久影院| 亚洲中文字幕综合小综合| 视频一区二区综合精品| 国产精品一二三不卡带免费视频 | 人人人妻人人澡人人| 国语对白xxxx乱大交| 亚洲欧美成人综合在线观看| 激情内射在线免费观看| 亚洲福利天堂久久久久久| 开心 色 六月 婷婷| 国产精品入口麻豆啊啊啊| 岛国黄色大片在线观看| 中文字幕最新久久久| 大胸性感美女羞爽操逼毛片| 亚洲免费在线视频网站| 亚洲成人激情视频免费观看了| 亚洲中文精品人人免费| 精品首页在线观看视频| 岛国黄色大片在线观看| 九九热99视频在线观看97| 亚洲精品 日韩电影| 成年人免费看在线视频| 精品国产成人亚洲午夜| 66久久久久久久久久久| 亚洲成人av一区在线| 日本阿v视频在线免费观看| 欧美久久一区二区伊人| 999久久久久999| 中文字幕一区二 区二三区四区| 91精品国产黑色丝袜| 国产成人精品亚洲男人的天堂| 国产精品自拍视频大全| 国产1区,2区,3区| 国产黄色片蝌蚪九色91| 夜女神免费福利视频| 和邻居少妇愉情中文字幕| 韩国黄色一级二级三级| 日本熟妇丰满厨房55| 97精品综合久久在线| 天天色天天爱天天爽| 五十路息与子猛烈交尾视频| 天天日天天爽天天干| 久青青草视频手机在线免费观看| 欧美综合婷婷欧美综合| 午夜福利人人妻人人澡人人爽| 亚洲 自拍 色综合图| 欧美精产国品一二三区| okirakuhuhu在线观看| 国产精品黄色的av| 亚洲一区制服丝袜美腿| rct470中文字幕在线| 欧美精产国品一二三区| www日韩a级s片av| 国产女人被做到高潮免费视频 | 日本女大学生的黄色小视频| 曰本无码人妻丰满熟妇啪啪| 久久精品久久精品亚洲人| 国产精品黄片免费在线观看| 天天日天天敢天天干| 男女第一次视频在线观看| 日本乱人一区二区三区| 夜色福利视频在线观看| 亚洲精品在线资源站| 欧美激情精品在线观看| 中文字幕,亚洲人妻| 天天操天天干天天艹| 国产成人精品福利短视频| 老鸭窝在线观看一区| 绝色少妇高潮3在线观看| 久久一区二区三区人妻欧美| 成人高潮aa毛片免费| 色呦呦视频在线观看视频| 黑人性生活视频免费看| 唐人色亚洲av嫩草| 蜜臀成人av在线播放| 日韩欧美一级黄片亚洲| 国产综合视频在线看片| 久草视频 久草视频2| 精品一区二区亚洲欧美| 天天躁日日躁狠狠躁av麻豆| 啊啊啊视频试看人妻| 社区自拍揄拍尻屁你懂的| 日辽宁老肥女在线观看视频| 欧美在线精品一区二区三区视频 | 日韩av熟妇在线观看| 亚洲推理片免费看网站| 国产精品黄大片在线播放| 精品高潮呻吟久久av| 日本高清在线不卡一区二区| 一区二区三区久久久91| 91亚洲手机在线视频播放| 亚洲成人黄色一区二区三区| 国产熟妇乱妇熟色T区| 亚洲嫩模一区二区三区| 2022中文字幕在线| 亚洲在线免费h观看网站| 中文字幕第一页国产在线| 偷拍美女一区二区三区| 51国产偷自视频在线播放| 亚洲成人三级在线播放| 久久人人做人人妻人人玩精品vr| 强行扒开双腿猛烈进入免费版| 99国内小视频在现欢看| 国产剧情演绎系列丝袜高跟| 日韩av有码一区二区三区4 | 成人激情文学网人妻| 啪啪啪啪啪啪啪啪啪啪黄色| 成人亚洲国产综合精品| 欧洲国产成人精品91铁牛tv| 国产精品黄页网站视频| 97年大学生大白天操逼| 99热这里只有精品中文| 看一级特黄a大片日本片黑人| 在线观看国产免费麻豆| 大学生A级毛片免费视频| 亚洲av人人澡人人爽人人爱| 夜色撩人久久7777| 欧洲日韩亚洲一区二区三区| 午夜场射精嗯嗯啊啊视频| 国产之丝袜脚在线一区二区三区 | 视频二区在线视频观看| 成人亚洲国产综合精品| 51国产成人精品视频| 国产一区成人在线观看视频 | av日韩在线观看大全| 国产男女视频在线播放| weyvv5国产成人精品的视频| 亚洲日本一区二区三区| 激情五月婷婷免费视频| 激情五月婷婷综合色啪| 国产成人精品av网站| 老鸭窝日韩精品视频观看| 夜色福利视频在线观看| 黑人解禁人妻叶爱071| 日比视频老公慢点好舒服啊| 九九视频在线精品播放| 免费啪啪啪在线观看视频| av在线免费观看亚洲天堂| 动色av一区二区三区| 成人在线欧美日韩国产| 国产一区二区久久久裸臀| 综合激情网激情五月五月婷婷| 亚洲女人的天堂av| 一区二区三区 自拍偷拍| 999热精品视频在线| 人妻久久久精品69系列| 成年人该看的视频黄免费| 91精品啪在线免费| 天天干天天日天天谢综合156| 91社福利《在线观看| 中文乱理伦片在线观看| 欧美日本aⅴ免费视频| 啪啪啪啪啪啪啪免费视频| 国产黄色片在线收看| 亚洲成人情色电影在线观看| 欧美男同性恋69视频| 国产福利在线视频一区| 欧美一区二区三区啪啪同性| 中文字幕日韩精品日本| 中文亚洲欧美日韩无线码| 天天摸天天日天天操| 久久午夜夜伦痒痒想咳嗽P| 啪啪啪啪啪啪啪啪啪啪黄色| 开心 色 六月 婷婷| 91福利在线视频免费观看| 国产日本精品久久久久久久| ka0ri在线视频| 在线观看视频污一区| 中文字幕无码一区二区免费| 成人免费公开视频无毒| 欧美黑人性猛交xxxxⅹooo| 在线播放国产黄色av| 日本中文字幕一二区视频| 玩弄人妻熟妇性色av少妇| 干逼又爽又黄又免费的视频| 一区二区三区欧美日韩高清播放| 国产av福利网址大全| 亚欧在线视频你懂的| 狍和女人的王色毛片| 女生自摸在线观看一区二区三区| 成人激情文学网人妻| 扒开腿挺进肉嫩小18禁视频| 欧美精产国品一二三产品价格| 91精品免费久久久久久| 日韩av大胆在线观看| 白白操白白色在线免费视频| 国产一区av澳门在线观看| 久久午夜夜伦痒痒想咳嗽P| 大鸡巴后入爆操大屁股美女| 97人人妻人人澡人人爽人人精品| 青草青永久在线视频18| wwwxxx一级黄色片| 人妻丝袜精品中文字幕| 国产精品自偷自拍啪啪啪| 大鸡吧插逼逼视频免费看| 2020国产在线不卡视频| 91色九色porny| 天天夜天天日天天日| www,久久久,com| 中文字幕中文字幕人妻| 中文字幕高清资源站| 亚洲欧美色一区二区| 日本男女操逼视频免费看| 欧美专区日韩专区国产专区| 东游记中文字幕版哪里可以看到| 国产使劲操在线播放| 亚洲av午夜免费观看| 久久这里只有精彩视频免费| 五十路人妻熟女av一区二区| 在线制服丝袜中文字幕| 精品人妻每日一部精品| 涩爱综合久久五月蜜臀| 日本少妇人妻xxxxxhd| 亚洲天堂第一页中文字幕| 一级a看免费观看网站| 日日摸夜夜添夜夜添毛片性色av| 中文字幕 亚洲av| 黄色成年网站午夜在线观看| 成人国产激情自拍三区| 桃色视频在线观看一区二区| 99的爱精品免费视频| 自拍偷拍 国产资源| 熟女视频一区,二区,三区| 黄色的网站在线免费看| 人妻少妇精品久久久久久| 天天日天天敢天天干| 色婷婷久久久久swag精品| 女人精品内射国产99| 人妻少妇性色欲欧美日韩| 日本少妇的秘密免费视频| 动漫美女的小穴视频| 女同久久精品秋霞网| 人妻丰满熟妇综合网| 蜜桃专区一区二区在线观看| 亚洲高清一区二区三区视频在线| 久久久久久cao我的性感人妻| 亚洲 中文 自拍 另类 欧美 | 男人的天堂一区二区在线观看| 欧美天堂av无线av欧美| 日韩视频一区二区免费观看| 夜夜嗨av蜜臀av| 亚洲 图片 欧美 图片| 精品一区二区三区三区88 | 欧美怡红院视频在线观看| 国产日韩一区二区在线看| 蜜桃色婷婷久久久福利在线| 人人超碰国字幕观看97| 一二三区在线观看视频| 色综合天天综合网国产成人| 欧美一区二区中文字幕电影| 亚洲男人的天堂a在线| 一色桃子久久精品亚洲 | 啊啊好慢点插舔我逼啊啊啊视频| 亚洲av可乐操首页| 欧美性受xx黑人性猛交| 视频一区二区在线免费播放| 国产在线拍揄自揄视频网站| 最新中文字幕免费视频| 成人精品视频99第一页| 丰满熟女午夜福利视频| 搡老熟女一区二区在线观看| 后入美女人妻高清在线| 亚洲精品国产久久久久久| 国产成人无码精品久久久电影| 2o22av在线视频| 天天干天天操天天扣| 成人久久精品一区二区三区| 伊人成人综合开心网| 2025年人妻中文字幕乱码在线| 57pao国产一区二区| 大鸡吧插逼逼视频免费看| 青青青爽视频在线播放| 精品国产乱码一区二区三区乱| 免费费一级特黄真人片| 日韩剧情片电影在线收看| 午夜免费体验区在线观看| 欲乱人妻少妇在线视频裸| 国产成人午夜精品福利| 国产三级影院在线观看| 亚洲一级美女啪啪啪| 3337p日本欧洲大胆色噜噜| 免费一级特黄特色大片在线观看| 小泽玛利亚视频在线观看| 国产熟妇一区二区三区av| 亚洲一区二区三区精品乱码| 日本最新一二三区不卡在线| 国产欧美精品一区二区高清| 91福利视频免费在线观看| 亚洲老熟妇日本老妇| 精品av国产一区二区三区四区 | chinese国产盗摄一区二区| 黄色中文字幕在线播放| 91亚洲国产成人精品性色| 久草视频首页在线观看| 亚洲国产成人最新资源| 超级碰碰在线视频免费观看| 日韩在线视频观看有码在线| 欧美黑人性暴力猛交喷水| 久久久久久久精品成人热| 激情伦理欧美日韩中文字幕| 特黄老太婆aa毛毛片| 国产一区av澳门在线观看| 毛片一级完整版免费| 国产亚洲视频在线二区| 日噜噜噜夜夜噜噜噜天天噜噜噜| 成人av久久精品一区二区| 久久综合老鸭窝色综合久久| 国产福利小视频二区| 欧美精品中文字幕久久二区| 无码精品一区二区三区人| 久久综合老鸭窝色综合久久| 免费看高清av的网站| 欧美专区日韩专区国产专区| 中文字幕人妻一区二区视频| 综合一区二区三区蜜臀| av完全免费在线观看av| 成年女人免费播放视频| gogo国模私拍视频| 美女被肏内射视频网站| 在线观看国产网站资源| 嫩草aⅴ一区二区三区| 99精品国自产在线人| 国产大鸡巴大鸡巴操小骚逼小骚逼| 免费一级黄色av网站| 欧美综合婷婷欧美综合| 中文字幕人妻av在线观看| 97精品综合久久在线| 精品视频一区二区三区四区五区| 一本久久精品一区二区| 天天干天天操天天玩天天射| 亚洲一区二区激情在线| 9久在线视频只有精品| 亚洲va国产va欧美va在线| 国产日韩精品免费在线| 国际av大片在线免费观看| 欧美少妇性一区二区三区| 制丝袜业一区二区三区| 国产成人精品久久二区91| 久久久噜噜噜久久熟女av| 国产午夜无码福利在线看| 免费在线观看视频啪啪| 中文字幕+中文字幕| 成人av亚洲一区二区| 免费黄页网站4188| 欧美男人大鸡吧插女人视频| 国产真实灌醉下药美女av福利| 久久麻豆亚洲精品av| 日本少妇人妻xxxxxhd| 99久久99久国产黄毛片| 国产成人自拍视频播放| 一区二区三区蜜臀在线| 久久久精品精品视频视频| 最新的中文字幕 亚洲| 曰本无码人妻丰满熟妇啪啪| 91色网站免费在线观看| 亚洲精品久久视频婷婷| 成人精品在线观看视频| 青青青青操在线观看免费| 日韩熟女系列一区二区三区| 日韩近亲视频在线观看| 国产日韩av一区二区在线| av手机免费在线观看高潮| 在线观看一区二区三级| 黄色成年网站午夜在线观看| xxx日本hd高清| 天天操天天爽天天干| 女生自摸在线观看一区二区三区 | 国产片免费观看在线观看| 98视频精品在线观看| 二区中出在线观看老师| 一区二区三区 自拍偷拍| 热久久只有这里有精品| 亚洲国产第一页在线观看| 99热久久这里只有精品8| 五月色婷婷综合开心网4438| 亚洲蜜臀av一区二区三区九色| 欧洲亚洲欧美日韩综合| 啪啪啪操人视频在线播放| 欧美成人精品在线观看| 天堂va蜜桃一区入口| 亚洲人妻视频在线网| 大香蕉大香蕉在线看| 亚洲天堂有码中文字幕视频| 黄片大全在线观看观看| 久久一区二区三区人妻欧美| 天天日天天干天天干天天日| 91色秘乱一区二区三区| 国产麻豆乱子伦午夜视频观看| 少妇人妻久久久久视频黄片| 青青社区2国产视频| 人人妻人人爽人人添夜| 国产免费av一区二区凹凸四季| 午夜成午夜成年片在线观看| 欧美美女人体视频一区| 亚洲另类在线免费观看| 丝袜肉丝一区二区三区四区在线 | 天天色天天操天天舔| 中文字幕日韩91人妻在线| 天天干天天日天天干天天操| 日噜噜噜夜夜噜噜噜天天噜噜噜| 天美传媒mv视频在线观看| 天天色天天舔天天射天天爽| 99的爱精品免费视频| 亚洲一级av大片免费观看| 老熟妇凹凸淫老妇女av在线观看| 天天操天天干天天日狠狠插 | 日本人妻少妇18—xx| 在线观看欧美黄片一区二区三区| 精品欧美一区二区vr在线观看| 天堂av中文在线最新版| 日本一道二三区视频久久| 久久这里只有精彩视频免费| 亚洲午夜在线视频福利| 日韩欧美一级精品在线观看| 亚洲欧美人精品高清| 免费在线观看视频啪啪| 欧美日韩熟女一区二区三区| 免费观看丰满少妇做受| 直接能看的国产av| 亚洲色偷偷综合亚洲AV伊人| 久久永久免费精品人妻专区 | 欧美viboss性丰满| 青青青青青青青在线播放视频| 99久久成人日韩欧美精品| 亚洲av色图18p| 国语对白xxxx乱大交| 国内资源最丰富的网站| 午夜国产福利在线观看| 午夜精品福利一区二区三区p| 久久国产精品精品美女| 四川乱子伦视频国产vip| 91久久综合男人天堂| 九一传媒制片厂视频在线免费观看| 亚洲精品麻豆免费在线观看| 精品国产成人亚洲午夜| 亚洲精品色在线观看视频| 中国把吊插入阴蒂的视频| 青青青视频自偷自拍38碰| 亚洲伊人av天堂有码在线| 天天爽夜夜爽人人爽QC| 在线观看免费岛国av| 亚洲综合另类欧美久久| 国产成人精品亚洲男人的天堂| 超污视频在线观看污污污| 五十路在线观看完整版| 人妻最新视频在线免费观看| 欧美中国日韩久久精品| 亚洲av日韩av网站| 精品一区二区三区欧美| 91天堂精品一区二区| 日韩欧美一级aa大片| 中英文字幕av一区| 一区二区三区麻豆福利视频| 国产精品3p和黑人大战| 国产午夜无码福利在线看| 97精品综合久久在线| 少妇人妻真实精品视频| 日韩人妻xxxxx| 天天摸天天日天天操| 日韩伦理短片在线观看| 欧洲精品第一页欧洲精品亚洲| av在线观看网址av| 亚洲嫩模一区二区三区| 中文字幕免费在线免费| 黄工厂精品视频在线观看| 亚洲 中文字幕在线 日韩| 日韩av大胆在线观看| 亚洲av男人的天堂你懂的| 青青色国产视频在线| 少妇人妻真实精品视频| 九色porny九色9l自拍视频| av在线播放国产不卡| 看一级特黄a大片日本片黑人| 色综合久久无码中文字幕波多| 97人妻无码AV碰碰视频| 91国内视频在线观看| 92福利视频午夜1000看| 人妻少妇亚洲一区二区| 精品视频中文字幕在线播放| 日韩a级精品一区二区| 91超碰青青中文字幕| 天天操,天天干,天天射| 激情五月婷婷免费视频| 非洲黑人一级特黄片| 99精品视频在线观看婷婷| 精品91高清在线观看| 蜜桃视频在线欧美一区| 青青青视频手机在线观看| 粗大的内捧猛烈进出爽大牛汉子| 涩爱综合久久五月蜜臀| 午夜精品亚洲精品五月色| 边摸边做超爽毛片18禁色戒| 亚洲欧美激情人妻偷拍| 午夜毛片不卡在线看| 人人爽亚洲av人人爽av| 久久这里有免费精品| 中国把吊插入阴蒂的视频| 欧美美女人体视频一区| 午夜毛片不卡免费观看视频| 中文亚洲欧美日韩无线码| 中文字母永久播放1区2区3区| 伊人综合免费在线视频| 国产精品亚洲在线观看| 五月天久久激情视频| 久久www免费人成一看片| 亚洲中文字字幕乱码| 久久h视频在线观看| 老司机免费福利视频网| 欧美精品中文字幕久久二区| 成人亚洲国产综合精品| 国产一区二区欧美三区| 极品丝袜一区二区三区| 成人资源在线观看免费官网| 蜜桃视频17c在线一区二区| 亚洲1区2区3区精华液| 国产av一区2区3区| 成人国产小视频在线观看| 少妇ww搡性bbb91| 国产内射中出在线观看| 国产女人露脸高潮对白视频| 亚洲免费视频欧洲免费视频| 欧美va不卡视频在线观看| 人妻少妇中文有码精品| 在线视频免费观看网| 亚洲成人国产综合一区| 91精品国产综合久久久蜜| 性欧美日本大妈母与子| 天天日天天操天天摸天天舔| 18禁美女黄网站色大片下载| 伊人综合免费在线视频| 天堂v男人视频在线观看| 91精品资源免费观看| 欧美色呦呦最新网址| 福利午夜视频在线合集| 亚洲精品欧美日韩在线播放| 国产三级片久久久久久久| 夜夜嗨av蜜臀av| 国产欧美精品免费观看视频| 激情国产小视频在线| 国产精品中文av在线播放| 欧美中文字幕一区最新网址| 亚洲伊人av天堂有码在线| 亚洲熟女久久久36d| 日本三极片中文字幕| 天干天天天色天天日天天射| 超碰97人人澡人人| 中文字幕av一区在线观看| 国产福利在线视频一区| 天堂女人av一区二区| 超碰97免费人妻麻豆| 99热碰碰热精品a中文| 亚洲精品精品国产综合| 熟女在线视频一区二区三区| 日视频免费在线观看| 涩爱综合久久五月蜜臀| 国产熟妇乱妇熟色T区| 天天干天天搞天天摸| 老司机99精品视频在线观看| 91久久国产成人免费网站| 欧美日韩精品永久免费网址 | 日本一区精品视频在线观看| 国产大学生援交正在播放| 97精品成人一区二区三区| av中文字幕电影在线看| 欧美日韩精品永久免费网址| 国产97在线视频观看| 欧美熟妇一区二区三区仙踪林| 国产91久久精品一区二区字幕| av手机在线免费观看日韩av| 欧美视频一区免费在线| 国产伦精品一区二区三区竹菊| 男人靠女人的逼视频| 亚洲码av无色中文| 国产午夜亚洲精品麻豆| 日日爽天天干夜夜操| 欧美80老妇人性视频| 熟女91pooyn熟女| 亚洲另类图片蜜臀av| 天天操夜夜操天天操天天操 | 操人妻嗷嗷叫视频一区二区 | 精品久久婷婷免费视频| 天天摸天天日天天操| 日韩视频一区二区免费观看| 亚洲中文字字幕乱码| 在线国产中文字幕视频| 亚洲乱码中文字幕在线| 天天日天天做天天日天天做| 五月天色婷婷在线观看视频免费| 亚洲 欧美 自拍 偷拍 在线| 91免费黄片可看视频| 99re6热在线精品| 999九九久久久精品| 大胸性感美女羞爽操逼毛片| 天天日天天鲁天天操| av手机在线观播放网站| 日韩成人性色生活片| 免费观看国产综合视频| 2022国产精品视频| 久久综合老鸭窝色综合久久 | 91久久国产成人免费网站| 亚洲图片偷拍自拍区| 中文字幕日韩精品就在这里| 日本成人不卡一区二区| 亚洲高清免费在线观看视频| 色综合久久五月色婷婷综合| 亚洲人一区二区中文字幕| 最新中文字幕乱码在线| 成人sm视频在线观看| 国产美女一区在线观看| 欧美日韩熟女一区二区三区| 免费av岛国天堂网站| 人人在线视频一区二区| 日本成人不卡一区二区| 欧美激情电影免费在线| 国产午夜男女爽爽爽爽爽视频| 欧美成人综合色在线噜噜| 中文字幕乱码人妻电影| 国产视频网站一区二区三区| 天天操,天天干,天天射| 老师啊太大了啊啊啊尻视频| 欧美久久久久久三级网| 2019av在线视频| 日本av熟女在线视频| 国产欧美精品不卡在线| 蜜臀av久久久久蜜臀av麻豆| 国产a级毛久久久久精品| 女生自摸在线观看一区二区三区 | 我想看操逼黄色大片| 欧美性感尤物人妻在线免费看| 被大鸡吧操的好舒服视频免费| 日韩精品一区二区三区在线播放| 黄色中文字幕在线播放| 人妻少妇av在线观看| 日韩欧美在线观看不卡一区二区| 中文字幕在线一区精品| 欧美日韩情色在线观看| 国产日本欧美亚洲精品视| 中文字幕亚洲久久久| 成人伊人精品色xxxx视频| 日本福利午夜电影在线观看| 日本a级视频老女人| 天天干天天搞天天摸| 亚洲av无硬久久精品蜜桃| 成人精品视频99第一页| 亚洲天堂av最新网址| 亚洲欧洲一区二区在线观看| 国产一区二区火爆视频| 国产伊人免费在线播放| 欧美日韩一级黄片免费观看| 老司机午夜精品视频资源| 熟女妇女老妇一二三区| 成人精品视频99第一页| 亚洲第17页国产精品| 国产又色又刺激在线视频 | 日本高清成人一区二区三区| av在线资源中文字幕| 9l人妻人人爽人人爽| 五十路在线观看完整版| 一区二区视频视频视频| brazzers欧熟精品系列| 国产精品黄大片在线播放| www天堂在线久久| 在线免费观看av日韩| 特级无码毛片免费视频播放| 亚洲成人激情视频免费观看了| 在线观看国产网站资源| 熟女少妇激情五十路| 极品粉嫩小泬白浆20p主播| 国产精品成人xxxx| 久草视频首页在线观看| 午夜成午夜成年片在线观看| 98视频精品在线观看| 中文字幕av熟女人妻| 任我爽精品视频在线播放| 精品欧美一区二区vr在线观看| 好太好爽好想要免费| 含骚鸡巴玩逼逼视频| 把腿张开让我插进去视频| 懂色av蜜桃a v| 精品久久婷婷免费视频| 偷拍自拍福利视频在线观看| 欧美区一区二区三视频| 播放日本一区二区三区电影| 亚洲av一妻不如妾| 高清成人av一区三区| 韩国黄色一级二级三级| chinese国产盗摄一区二区| 国产亚洲四十路五十路| 日日摸夜夜添夜夜添毛片性色av| 欧美视频不卡一区四区| 青娱乐蜜桃臀av色| 日韩激情文学在线视频| 国产在线91观看免费观看| 人人妻人人爽人人添夜| 久久永久免费精品人妻专区 | 中文字幕一区的人妻欧美日韩| 青青青青青青青在线播放视频| 天干天天天色天天日天天射| 中文字幕免费在线免费| 这里有精品成人国产99| 三上悠亚和黑人665番号| AV天堂一区二区免费试看| 3344免费偷拍视频| 大香蕉伊人中文字幕| 91福利在线视频免费观看| 国产一级精品综合av| 91破解版永久免费| 久久精品国产23696| 国产实拍勾搭女技师av在线| h国产小视频福利在线观看| 精品国产亚洲av一淫| 快插进小逼里大鸡吧视频| 特级无码毛片免费视频播放| 偷青青国产精品青青在线观看| 成人福利视频免费在线| 丰满少妇翘臀后进式| 成人伊人精品色xxxx视频| 99久久中文字幕一本人| 91久久人澡人人添人人爽乱| 91 亚洲视频在线观看| 91国产资源在线视频| 春色激情网欧美成人| 精品人人人妻人人玩日产欧| 91极品大一女神正在播放| 天天色天天爱天天爽| 91精品国产综合久久久蜜| 成人免费公开视频无毒| 九色精品视频在线播放| 精品一区二区三区三区色爱| 偷拍自拍亚洲美腿丝袜| 黄片色呦呦视频免费看| 中文字幕第1页av一天堂网| 精品国产污污免费网站入口自| 2020久久躁狠狠躁夜夜躁| 成人区人妻精品一区二视频| 亚洲欧美综合另类13p| 亚洲欧美一区二区三区电影| 成年人的在线免费视频| 日韩欧美一级黄片亚洲| 欧美黑人性猛交xxxxⅹooo| 香蕉aⅴ一区二区三区| 亚洲在线一区二区欧美| 五月天色婷婷在线观看视频免费| 国产一区av澳门在线观看| 男人和女人激情视频| av天堂加勒比在线| 国产老熟女伦老熟妇ⅹ| 欧美精产国品一二三产品价格| 超碰中文字幕免费观看| 91色秘乱一区二区三区| 精品欧美一区二区vr在线观看| 欧美一区二区三区在线资源| 三上悠亚和黑人665番号| 老司机你懂得福利视频| 青青青青青青青在线播放视频| 人妻丝袜榨强中文字幕| 91精品资源免费观看| 亚洲一级美女啪啪啪| 亚洲人妻国产精品综合| 国产夫妻视频在线观看免费| 午夜影院在线观看视频羞羞羞| 国产欧美精品不卡在线| 欧美精品资源在线观看| 成人亚洲精品国产精品| 99精品国产免费久久| 亚洲国产精品免费在线观看| 人妻少妇精品久久久久久 | av在线免费中文字幕| yy6080国产在线视频| 骚货自慰被发现爆操| 国产精品久久9999| 亚洲中文字字幕乱码| 在线观看日韩激情视频| 孕妇奶水仑乱A级毛片免费看| 93人妻人人揉人人澡人人| 人妻自拍视频中国大陆| 人妻久久久精品69系列| 综合激情网激情五月天| av完全免费在线观看av| 91精品国产观看免费| 桃色视频在线观看一区二区| 99精品国产aⅴ在线观看| 人妻丝袜榨强中文字幕| 韩国AV无码不卡在线播放| 亚洲av自拍偷拍综合| 青青青青青青草国产| 91she九色精品国产| 国产精品国色综合久久| 大香蕉伊人国产在线| 亚洲精品在线资源站| 国产精品伦理片一区二区| 国产一区二区火爆视频| 91精品高清一区二区三区| 色综合久久无码中文字幕波多| 国产成人精品福利短视频| 成年女人免费播放视频| 亚洲区美熟妇久久久久| 午夜毛片不卡免费观看视频| 日本少妇的秘密免费视频| 色天天天天射天天舔| 99精品久久久久久久91蜜桃| 少妇人妻100系列| 中文字幕在线观看国产片| 成人精品视频99第一页| 婷婷久久一区二区字幕网址你懂得| 亚洲人妻国产精品综合| 久草视频在线看免费| 久久尻中国美女视频| 亚洲丝袜老师诱惑在线观看| 蜜桃专区一区二区在线观看| 欧美aa一级一区三区四区| 精品美女久久久久久| 天天躁夜夜躁日日躁a麻豆| 天天干天天日天天干天天操| 一区二区视频在线观看视频在线| 午夜青青草原网在线观看| 欧美中文字幕一区最新网址| 五月天色婷婷在线观看视频免费 | 区一区二区三国产中文字幕| 视频 国产 精品 熟女 | 国产91嫩草久久成人在线视频| 美女小视频网站在线| 鸡巴操逼一级黄色气| 国产精品国产精品一区二区| 欧美美女人体视频一区| 姐姐的朋友2在线观看中文字幕| 日韩av中文在线免费观看| 日本女人一级免费片| 97人妻色免费视频| 精品国产成人亚洲午夜| 在线观看免费av网址大全| 久久h视频在线观看| 日曰摸日日碰夜夜爽歪歪| 大陆av手机在线观看| 中文字幕在线观看极品视频| 揄拍成人国产精品免费看视频| 黄色在线观看免费观看在线| 亚洲第一黄色在线观看| 欧美中国日韩久久精品| 亚国产成人精品久久久| 人妻少妇av在线观看| 97精品综合久久在线| 91传媒一区二区三区| 9l人妻人人爽人人爽| 中文字幕 人妻精品| 一二三区在线观看视频| 久久国产精品精品美女| 一级a看免费观看网站| 美女吃鸡巴操逼高潮视频| 中文字幕人妻一区二区视频| 国产之丝袜脚在线一区二区三区| 91社福利《在线观看| 喷水视频在线观看这里只有精品| 日日夜夜狠狠干视频| av在线观看网址av| 制服丝袜在线人妻中文字幕| 欧美黄片精彩在线免费观看| 中文字幕1卡1区2区3区| 国产成人精品一区在线观看| 亚洲护士一区二区三区| 少妇人妻久久久久视频黄片| 国产日韩精品电影7777| 97人妻无码AV碰碰视频| 亚洲一区二区久久久人妻| aiss午夜免费视频| 欧美国产亚洲中英文字幕| 久久亚洲天堂中文对白| 午夜精品在线视频一区| 亚洲人妻国产精品综合| 含骚鸡巴玩逼逼视频| 极品粉嫩小泬白浆20p主播| 天天操天天爽天天干| 久久三久久三久久三久久| 最新的中文字幕 亚洲| 国产精品国产精品一区二区| 天天日天天玩天天摸| 久久亚洲天堂中文对白| 97人妻总资源视频| 66久久久久久久久久久| 午夜国产免费福利av| 色婷婷六月亚洲综合香蕉| 污污小视频91在线观看| 黄片大全在线观看观看| 日本丰满熟妇大屁股久久| 亚洲天堂有码中文字幕视频| 国产三级影院在线观看| 美女吃鸡巴操逼高潮视频| 亚洲美女自偷自拍11页| 国产精品一区二区av国| 日韩伦理短片在线观看| av一本二本在线观看| 欧美亚洲自偷自拍 在线| 免费国产性生活视频| 97人人模人人爽人人喊| 人妻少妇中文有码精品| 国产精品手机在线看片| 亚洲日本一区二区久久久精品| 91色老99久久九九爱精品| 日韩近亲视频在线观看| 91色网站免费在线观看| 超碰中文字幕免费观看| 在线免费观看日本片| 中文字幕一区二区人妻电影冢本| www久久久久久久久久久| 亚洲人一区二区中文字幕| 欧美区一区二区三视频| 夜夜嗨av蜜臀av| 亚洲一区制服丝袜美腿| 国产极品美女久久久久久| 激情小视频国产在线| 国产又粗又猛又爽又黄的视频在线| 欧美老妇精品另类不卡片| 一二三区在线观看视频| 男人的天堂一区二区在线观看| 亚洲第一伊人天堂网| 在线国产日韩欧美视频| 青娱乐极品视频青青草| 日韩三级电影华丽的外出| 久久午夜夜伦痒痒想咳嗽P| 色狠狠av线不卡香蕉一区二区| 成人免费公开视频无毒| 在线免费观看靠比视频的网站| 欧美精品国产综合久久| avjpm亚洲伊人久久| 91p0rny九色露脸熟女| 国产精品久久久久国产三级试频| 欧美一区二区三区久久久aaa| 三级等保密码要求条款| 中文字幕高清资源站| 亚洲av无硬久久精品蜜桃| 久久久久久久久久一区二区三区 | 欲乱人妻少妇在线视频裸| 午夜免费体验区在线观看| 在线不卡成人黄色精品| 精品区一区二区三区四区人妻 | 日韩a级精品一区二区| 色综合久久五月色婷婷综合| 国产av欧美精品高潮网站| 97资源人妻免费在线视频| 亚洲精品无码久久久久不卡| 91中文字幕最新合集| 啊啊啊想要被插进去视频| 国产精品成人xxxx| 国产91久久精品一区二区字幕| 国产视频在线视频播放| 日韩中文字幕福利av| 亚洲福利午夜久久久精品电影网| 中文字幕视频一区二区在线观看 | 二区中出在线观看老师| xxx日本hd高清| 免费69视频在线看| 日韩在线视频观看有码在线| 青青热久免费精品视频在线观看| 全国亚洲男人的天堂| 午夜精品久久久久麻豆影视| 欧美另类重口味极品在线观看| 亚洲在线观看中文字幕av| yy6080国产在线视频| 国产美女午夜福利久久| 天天躁日日躁狠狠躁av麻豆| 欧洲国产成人精品91铁牛tv| 天天射夜夜操综合网| 国产不卡av在线免费| 亚洲一区制服丝袜美腿| 亚洲 中文字幕在线 日韩| 一区二区三区av高清免费| 欧美3p在线观看一区二区三区| 天天干天天搞天天摸| 黄色在线观看免费观看在线| 宅男噜噜噜666国产| 国产精品人妻66p| 亚洲成人黄色一区二区三区| 亚洲推理片免费看网站| 国产精品sm调教视频| 亚洲色偷偷综合亚洲AV伊人| 久久国产精品精品美女| 色综合久久五月色婷婷综合| 自拍偷拍vs一区二区三区| 91桃色成人网络在线观看| 亚洲推理片免费看网站| 成年人午夜黄片视频资源| 日本午夜爽爽爽爽爽视频在线观看| 肏插流水妹子在线乐播下载| 国产真实乱子伦a视频| 99热久久这里只有精品| 国产精品sm调教视频| 阴茎插到阴道里面的视频| 特一级特级黄色网片| 天天射,天天操,天天说| 亚洲成人熟妇一区二区三区| 亚洲一区制服丝袜美腿| 亚洲 欧美 自拍 偷拍 在线| 国产美女精品福利在线| 亚洲色偷偷综合亚洲AV伊人| av乱码一区二区三区| 中文人妻AV久久人妻水| av中文字幕福利网| 激情综合治理六月婷婷| 91精品国产麻豆国产| 欧美日韩在线精品一区二区三| 大学生A级毛片免费视频| 好吊视频—区二区三区| 日日日日日日日日夜夜夜夜夜夜| 97人人模人人爽人人喊| 国产一区二区久久久裸臀| 欧美一区二区三区在线资源| 自拍偷拍 国产资源| 激情国产小视频在线| 久久久久久97三级| 欧亚日韩一区二区三区观看视频| 在线观看免费av网址大全| 国产男女视频在线播放| 偷拍美女一区二区三区| 精品首页在线观看视频| 日韩人妻xxxxx| 美女吃鸡巴操逼高潮视频| 日本黄色特一级视频| 日韩美女精品视频在线观看网站 | 在线 中文字幕 一区| 亚洲欧美日韩视频免费观看| 久久久麻豆精亚洲av麻花| av日韩在线免费播放| 欧美80老妇人性视频| 人妻少妇亚洲一区二区| 天天射夜夜操综合网| 春色激情网欧美成人| 久草视频在线一区二区三区资源站| 国产亚洲精品欧洲在线观看| 中文字幕国产专区欧美激情| 国产精品精品精品999| 天天色天天操天天透| 欧美专区日韩专区国产专区| 亚洲欧美激情国产综合久久久| 中文字幕日韩人妻在线三区| 粉嫩欧美美人妻小视频| 欧美成人综合色在线噜噜| 成人性黑人一级av| 人妻另类专区欧美制服| 2022精品久久久久久中文字幕| 午夜在线观看一区视频| 在线不卡日韩视频播放| 婷婷色中文亚洲网68| 国产va精品免费观看| 91国产在线免费播放| 亚洲综合一区二区精品久久| 亚洲 欧美 精品 激情 偷拍| 成年女人免费播放视频| 亚洲一区二区三区久久受 | 国产又粗又猛又爽又黄的视频美国| 成熟熟女国产精品一区| 中文字幕av一区在线观看| 91免费观看国产免费| 和邻居少妇愉情中文字幕| 精内国产乱码久久久久久| 精内国产乱码久久久久久| 欧美一区二区三区乱码在线播放| 欧美日韩情色在线观看| 蜜臀av久久久久蜜臀av麻豆| 中文字幕网站你懂的| 一区二区三区毛片国产一区| 亚洲天堂精品久久久| 国产精品久久久久久久久福交| 成年人中文字幕在线观看| 成人在线欧美日韩国产| 国产a级毛久久久久精品| 午夜极品美女福利视频| 亚洲av无硬久久精品蜜桃| 午夜精品一区二区三区更新| 国产精品手机在线看片| 青青青爽视频在线播放| 天天日天天天天天天天天天天| 国产精品黄页网站视频| jiuse91九色视频| 欧美一级视频一区二区| 天天日天天干天天爱| 成人av免费不卡在线观看| 久久精品久久精品亚洲人| 天天做天天干天天舔| 美洲精品一二三产区区别| 中文字幕 码 在线视频| 精品亚洲国产中文自在线| 成人av免费不卡在线观看| 亚洲图片偷拍自拍区| 免费十精品十国产网站| 女同久久精品秋霞网| 亚洲少妇人妻无码精品| 欧美中国日韩久久精品| 色伦色伦777国产精品| 国产精品成久久久久三级蜜臀av| 欧美黑人性暴力猛交喷水| 亚洲一区二区久久久人妻| av网站色偷偷婷婷网男人的天堂| 国产品国产三级国产普通话三级| 亚洲人一区二区中文字幕| 天天日天天做天天日天天做| 999久久久久999| 色综合久久久久久久久中文| 午夜精彩视频免费一区| 色婷婷综合激情五月免费观看| 九一传媒制片厂视频在线免费观看| 国产女人被做到高潮免费视频| 19一区二区三区在线播放| 人妻自拍视频中国大陆| 熟女人妻在线观看视频| 欧美老鸡巴日小嫩逼| 大香蕉福利在线观看| 伊人日日日草夜夜草| 任我爽精品视频在线播放| 亚洲国产香蕉视频在线播放| 9久在线视频只有精品| 国产亚洲四十路五十路| 国产精品sm调教视频| 班长撕开乳罩揉我胸好爽| 亚洲免费视频欧洲免费视频| 国产麻豆剧果冻传媒app| 91精品国产91青青碰| 五月婷婷在线观看视频免费 | 91九色porny国产在线| 大胸性感美女羞爽操逼毛片| 美女小视频网站在线| 一区二区麻豆传媒黄片| 男人天堂av天天操| 中英文字幕av一区| 硬鸡巴动态操女人逼视频| 国产性感美女福利视频| 天天综合天天综合天天网| 日本韩国亚洲综合日韩欧美国产| 精品av国产一区二区三区四区| 2020韩国午夜女主播在线| 久久香蕉国产免费天天| 亚洲嫩模一区二区三区| yy96视频在线观看| 最近中文字幕国产在线| 丰满的继坶3中文在线观看| 免费人成黄页网站在线观看国产 | 另类av十亚洲av| 成人免费公开视频无毒| 少妇人妻久久久久视频黄片| 国产精品3p和黑人大战| 淫秽激情视频免费观看| 亚洲欧美一区二区三区电影| 亚洲精品一区二区三区老狼| 超碰97人人澡人人| 100%美女蜜桃视频| 亚洲av无码成人精品区辽| 中文字幕人妻三级在线观看| 亚洲午夜精品小视频| 精彩视频99免费在线| 九九视频在线精品播放| 亚洲无线观看国产高清在线| 可以在线观看的av中文字幕| 99久久超碰人妻国产| 青青草国内在线视频精选| 国产精品黄片免费在线观看| 久久99久久99精品影院| 一区二区视频在线观看视频在线| 99精品免费观看视频| 久草福利电影在线观看| 亚洲av日韩av网站| 亚洲精品精品国产综合| 午夜婷婷在线观看视频| 男人的天堂一区二区在线观看| 精品高跟鞋丝袜一区二区| 日本免费视频午夜福利视频| 免费看国产av网站| 青青青青青青青青青青草青青| 91九色国产porny蝌蚪| 男女第一次视频在线观看| 玩弄人妻熟妇性色av少妇| 日韩精品电影亚洲一区| 宅男噜噜噜666国产| 国产精品熟女久久久久浪潮| 国产高清女主播在线| 18禁污污污app下载| 人妻少妇中文有码精品| 大肉大捧一进一出好爽在线视频| 精品一区二区三区午夜| 91精品国产观看免费| 日韩黄色片在线观看网站| 青青草原色片网站在线观看| 91九色porny国产蝌蚪视频| 少妇系列一区二区三区视频| 欧美精品伦理三区四区| 91精品国产观看免费| 精品国产污污免费网站入口自| 91九色国产porny蝌蚪| 亚洲欧美清纯唯美另类| 91亚洲精品干熟女蜜桃频道 | 97国产福利小视频合集| 黑人巨大的吊bdsm| 日韩欧美国产一区不卡| 亚洲另类伦春色综合小| 人妻3p真实偷拍一二区| 亚洲av自拍偷拍综合| 在线观看911精品国产| 99精品久久久久久久91蜜桃| 大香蕉福利在线观看| 日本三极片视频网站观看| 一区二区三区综合视频| 在线免费91激情四射| 亚洲免费在线视频网站| 日本最新一二三区不卡在线| 国产性生活中老年人视频网站| 搡老熟女一区二区在线观看| 亚洲一区二区三区在线高清| 国产精品视频欧美一区二区| 日本一区美女福利视频| 日韩欧美国产精品91| 国产精品污污污久久| 欧美精品 日韩国产| 欧美激情电影免费在线| 国产精品精品精品999| 不戴胸罩引我诱的隔壁的人妻| 不卡日韩av在线观看| 懂色av之国产精品| 超碰97人人澡人人| 97超碰国语国产97超碰| 大白屁股精品视频国产| 国产清纯美女al在线| 性色av一区二区三区久久久| 污污小视频91在线观看| 高潮视频在线快速观看国家快速| 大鸡吧插逼逼视频免费看| 成人国产小视频在线观看| 一区二区三区av高清免费| 亚洲va欧美va人人爽3p| 婷婷久久一区二区字幕网址你懂得 | 亚洲国产最大av综合| 国产av欧美精品高潮网站| 欧美 亚洲 另类综合| 久碰精品少妇中文字幕av | 成人伊人精品色xxxx视频| 免费无毒热热热热热热久| 人妻少妇一区二区三区蜜桃| 国产亚洲精品视频合集| 最近中文2019年在线看| 扒开让我视频在线观看| 日韩二区视频一线天婷婷五| 日韩精品电影亚洲一区| 亚洲视频在线观看高清| 国产精品入口麻豆啊啊啊| 东游记中文字幕版哪里可以看到| 91精品国产黑色丝袜| 日本av高清免费网站| 99国产精品窥熟女精品| 婷婷色中文亚洲网68| 亚洲国产成人最新资源| 亚洲成人午夜电影在线观看| 国产成人一区二区三区电影网站 | 欧亚日韩一区二区三区观看视频| 亚洲欧美综合在线探花| 日韩精品电影亚洲一区| 99热99这里精品6国产| 人人妻人人爽人人添夜| 日日夜夜大香蕉伊人| 国产妇女自拍区在线观看| 不卡精品视频在线观看| 天天干天天日天天谢综合156| 天天日天天做天天日天天做| 亚洲麻豆一区二区三区| 开心 色 六月 婷婷| 亚洲人妻视频在线网| 欧美日韩中文字幕欧美| 国产精品国色综合久久| 2020韩国午夜女主播在线| 亚洲国产精品久久久久久6| 偷拍自拍亚洲视频在线观看| 亚洲老熟妇日本老妇| 亚洲综合在线观看免费| 日美女屁股黄邑视频| 国产亚洲精品品视频在线| 午夜精品一区二区三区福利视频| 精品久久久久久高潮| 天天爽夜夜爽人人爽QC| 蜜臀av久久久久久久| 成年午夜免费无码区| 久草视频在线看免费| 888亚洲欧美国产va在线播放| 亚洲精品 日韩电影| 亚洲精品乱码久久久久久密桃明| 亚洲一区二区三区精品乱码| 欧美精产国品一二三产品区别大吗| eeuss鲁片一区二区三区| 亚洲国产成人最新资源| 人人人妻人人澡人人| 国产密臀av一区二区三| 成年人黄视频在线观看| 中文字幕在线第一页成人| 在线成人日韩av电影| 97少妇精品在线观看| 日韩不卡中文在线视频网站| 日韩美女精品视频在线观看网站| 午夜av一区二区三区| 亚洲熟女久久久36d| 天干天天天色天天日天天射| 欧美国品一二三产区区别| 男人的天堂av日韩亚洲| 白白操白白色在线免费视频 | 免费观看理论片完整版| 91麻豆精品秘密入口在线观看| 国产一级麻豆精品免费| 9久在线视频只有精品| 国产成人精品午夜福利训2021| 又粗又硬又猛又爽又黄的| 97精品成人一区二区三区| 又色又爽又黄的美女裸体| 好了av中文字幕在线| 久久丁香婷婷六月天| 熟女91pooyn熟女| 久草视频在线免播放| 国产成人午夜精品福利| 国产高清在线观看1区2区| 经典av尤物一区二区| 丝袜美腿欧美另类 中文字幕| 少妇人妻二三区视频| 午夜精品福利一区二区三区p | 欧美少妇性一区二区三区| 啪啪啪啪啪啪啪啪啪啪黄色| 五月天色婷婷在线观看视频免费| 福利午夜视频在线合集| 超碰中文字幕免费观看| 毛片一级完整版免费| 丝袜美腿欧美另类 中文字幕| 亚洲国产40页第21页| 国产黄色a级三级三级三级| 成人区人妻精品一区二视频| 韩国黄色一级二级三级| 中文字幕亚洲中文字幕| 偷青青国产精品青青在线观看| 黄色片黄色片wyaa| 老司机你懂得福利视频| 中文字幕高清免费在线人妻| 熟女人妻在线中出观看完整版| 成人综合亚洲欧美一区| 大香蕉日本伊人中文在线| 亚洲 中文 自拍 另类 欧美| 熟女视频一区,二区,三区| 性欧美激情久久久久久久| www天堂在线久久| 9l人妻人人爽人人爽| 亚洲国产免费av一区二区三区|