///SqlServer數(shù)據(jù)訪問幫助類///publicsealedclassSqlHelper{#region私有構(gòu)造函數(shù)和方法privateSqlHelper(){}///

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

SqlHelper(帶詳細中文注釋)

系統(tǒng) 2000 0

using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;

namespace hkszyy
{
?/// <summary>
?/// SqlServer數(shù)據(jù)訪問幫助類
?/// </summary>
?public sealed class SqlHelper
?{
??#region 私有構(gòu)造函數(shù)和方法

??private SqlHelper() {}

??/// <summary>
??/// 將SqlParameter參數(shù)數(shù)組(參數(shù)值)分配給SqlCommand命令.
??/// 這個方法將給任何一個參數(shù)分配DBNull.Value;
??/// 該操作將阻止默認值的使用.
??/// </summary>
??/// <param name="command">命令名</param>
??/// <param name="commandParameters">SqlParameters數(shù)組</param>
??private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
??{
???if( command == null ) throw new ArgumentNullException( "command" );
???if( commandParameters != null )
???{
????foreach (SqlParameter p in commandParameters)
????{
?????if( p != null )
?????{
??????// 檢查未分配值的輸出參數(shù),將其分配以DBNull.Value.
??????if ( ( p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input ) &&
???????(p.Value == null))
??????{
???????p.Value = DBNull.Value;
??????}
??????command.Parameters.Add(p);
?????}
????}
???}
??}

??/// <summary>
??/// 將DataRow類型的列值分配到SqlParameter參數(shù)數(shù)組.
??/// </summary>
??/// <param name="commandParameters">要分配值的SqlParameter參數(shù)數(shù)組</param>
??/// <param name="dataRow">將要分配給存儲過程參數(shù)的DataRow</param>
??private static void AssignParameterValues(SqlParameter[] commandParameters, DataRow dataRow)
??{
???if ((commandParameters == null) || (dataRow == null))
???{
????return;
???}

???int i = 0;
???// 設(shè)置參數(shù)值
???foreach(SqlParameter commandParameter in commandParameters)
???{
????// 創(chuàng)建參數(shù)名稱,如果不存在,只拋出一個異常.
????if( commandParameter.ParameterName == null ||
?????commandParameter.ParameterName.Length <= 1 )
?????throw new Exception(
??????string.Format("請?zhí)峁﹨?shù){0}一個有效的名稱{1}.", i, commandParameter.ParameterName ) );
????// 從dataRow的表中獲取為參數(shù)數(shù)組中數(shù)組名稱的列的索引.
????// 如果存在和參數(shù)名稱相同的列,則將列值賦給當前名稱的參數(shù).
????if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1)) != -1)
?????commandParameter.Value = dataRow[commandParameter.ParameterName.Substring(1)];
????i++;
???}
??}

??/// <summary>
??/// 將一個對象數(shù)組分配給SqlParameter參數(shù)數(shù)組.
??/// </summary>
??/// <param name="commandParameters">要分配值的SqlParameter參數(shù)數(shù)組</param>
??/// <param name="parameterValues">將要分配給存儲過程參數(shù)的對象數(shù)組</param>
??private static void AssignParameterValues(SqlParameter[] commandParameters, object[] parameterValues)
??{
???if ((commandParameters == null) || (parameterValues == null))
???{
????return;
???}

???// 確保對象數(shù)組個數(shù)與參數(shù)個數(shù)匹配,如果不匹配,拋出一個異常.
???if (commandParameters.Length != parameterValues.Length)
???{
????throw new ArgumentException("參數(shù)值個數(shù)與參數(shù)不匹配.");
???}

???// 給參數(shù)賦值
???for (int i = 0, j = commandParameters.Length; i < j; i++)
???{
????// If the current array value derives from IDbDataParameter, then assign its Value property
????if (parameterValues[i] is IDbDataParameter)
????{
?????IDbDataParameter paramInstance = (IDbDataParameter)parameterValues[i];
?????if( paramInstance.Value == null )
?????{
??????commandParameters[i].Value = DBNull.Value;
?????}
?????else
?????{
??????commandParameters[i].Value = paramInstance.Value;
?????}
????}
????else if (parameterValues[i] == null)
????{
?????commandParameters[i].Value = DBNull.Value;
????}
????else
????{
?????commandParameters[i].Value = parameterValues[i];
????}
???}
??}

??/// <summary>
??/// 預(yù)處理用戶提供的命令,數(shù)據(jù)庫連接/事務(wù)/命令類型/參數(shù)
??/// </summary>
??/// <param name="command">要處理的SqlCommand</param>
??/// <param name="connection">數(shù)據(jù)庫連接</param>
??/// <param name="transaction">一個有效的事務(wù)或者是null值</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本, 其它.)</param>
??/// <param name="commandText">存儲過程名或都T-SQL命令文本</param>
??/// <param name="commandParameters">和命令相關(guān)聯(lián)的SqlParameter參數(shù)數(shù)組,如果沒有參數(shù)為'null'</param>
??/// <param name="mustCloseConnection"><c>true</c> 如果連接是打開的,則為true,其它情況下為false.</param>
??private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, out bool mustCloseConnection )
??{
???if( command == null ) throw new ArgumentNullException( "command" );
???if( commandText == null || commandText.Length == 0 ) throw new ArgumentNullException( "commandText" );

???// If the provided connection is not open, we will open it
???if (connection.State != ConnectionState.Open)
???{
????mustCloseConnection = true;
????connection.Open();
???}
???else
???{
????mustCloseConnection = false;
???}

???// 給命令分配一個數(shù)據(jù)庫連接.
???command.Connection = connection;

???// 設(shè)置命令文本(存儲過程名或SQL語句)
???command.CommandText = commandText;

???// 分配事務(wù)
???if (transaction != null)
???{
????if( transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
????command.Transaction = transaction;
???}

???// 設(shè)置命令類型.
???command.CommandType = commandType;

???// 分配命令參數(shù)
???if (commandParameters != null)
???{
????AttachParameters(command, commandParameters);
???}
???return;
??}

??#endregion 私有構(gòu)造函數(shù)和方法結(jié)束

??#region ExecuteNonQuery命令

??/// <summary>
??/// 執(zhí)行指定連接字符串,類型的SqlCommand.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本, 其它.)</param>
??/// <param name="commandText">存儲過程名稱或SQL語句</param>
??/// <returns>返回命令影響的行數(shù)</returns>
??public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
??{
???return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定連接字符串,類型的SqlCommand.如果沒有提供參數(shù),不返回結(jié)果.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本, 其它.)</param>
??/// <param name="commandText">存儲過程名稱或SQL語句</param>
??/// <param name="commandParameters">SqlParameter參數(shù)數(shù)組</param>
??/// <returns>返回命令影響的行數(shù)</returns>
??public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );

???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????return ExecuteNonQuery(connection, commandType, commandText, commandParameters);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接字符串的存儲過程,將對象數(shù)組的值賦給存儲過程參數(shù),
??/// 此方法需要在參數(shù)緩存方法中探索參數(shù)并生成參數(shù).
??/// </summary>
??/// <remarks>
??/// 這個方法沒有提供訪問輸出參數(shù)和返回值.
??/// 示例:?
??///? int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串/param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配到存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回受影響的行數(shù)</returns>
??public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果存在參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從探索存儲過程參數(shù)(加載到緩存)并分配給存儲過程參數(shù)數(shù)組.
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)情況下
????return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型(存儲過程,命令文本或其它.)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)
??{
???return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型(存儲過程,命令文本或其它.)</param>
??/// <param name="commandText">T存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{???
???if( connection == null ) throw new ArgumentNullException( "connection" );

???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );
???????????
???// Finally, execute the command
???int retval = cmd.ExecuteNonQuery();
???????????
???// 清除參數(shù),以便再次使用.
???cmd.Parameters.Clear();
???if( mustCloseConnection )
????connection.Close();
???return retval;
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,將對象數(shù)組的值賦給存儲過程參數(shù).
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值
??/// 示例:?
??///? int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù)
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 給存儲過程分配參數(shù)值
????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行帶事務(wù)的SqlCommand.
??/// </summary>
??/// <remarks>
??/// 示例.:?
??///? int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
??/// </remarks>
??/// <param name="transaction">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型(存儲過程,命令文本或其它.)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回影響的行數(shù)/returns>
??public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText)
??{
???return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行帶事務(wù)的SqlCommand(指定參數(shù)).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型(存儲過程,命令文本或其它.)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );

???// 預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 執(zhí)行
???int retval = cmd.ExecuteNonQuery();
???????????????
???// 清除參數(shù)集,以便再次使用.
???cmd.Parameters.Clear();
???return retval;
??}

??/// <summary>
??/// 執(zhí)行帶事務(wù)的SqlCommand(指定參數(shù)值).
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值
??/// 示例:?
??///? int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
??/// </remarks>
??/// <param name="transaction">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回受影響的行數(shù)</returns>
??public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion ExecuteNonQuery方法結(jié)束

??#region ExecuteDataset方法

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
??{
???return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:
??///? DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamters參數(shù)數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );

???// 創(chuàng)建并打開數(shù)據(jù)庫連接對象,操作完成釋放對象.
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????// 調(diào)用指定數(shù)據(jù)庫連接字符串重載方法.
????return ExecuteDataset(connection, commandType, commandText, commandParameters);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,直接提供參數(shù)值,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值.
??/// 示例:
??///? DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中檢索存儲過程參數(shù)
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);

????// 給存儲過程參數(shù)分配值
????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
??{
???return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
??}
???????
??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,指定存儲過程參數(shù),返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );

???// 預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 創(chuàng)建SqlDataAdapter和DataSet.
???using( SqlDataAdapter da = new SqlDataAdapter(cmd) )
???{
????DataSet ds = new DataSet();

????// 填充DataSet.
????da.Fill(ds);
???????????????
????cmd.Parameters.Clear();

????if( mustCloseConnection )
?????connection.Close();

????return ds;
???}???
??}
???????
??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,指定參數(shù)值,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸入?yún)?shù)和返回值.
??/// 示例.:?
??///? DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 比緩存中加載存儲過程參數(shù)
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 給存儲過程參數(shù)分配值
????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定事務(wù)的命令,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="transaction">事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText)
??{
???return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);
??}
???????
??/// <summary>
??/// 執(zhí)行指定事務(wù)的命令,指定參數(shù),返回DataSet.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );

???// 預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 創(chuàng)建 DataAdapter & DataSet
???using( SqlDataAdapter da = new SqlDataAdapter(cmd) )
???{
????DataSet ds = new DataSet();
????da.Fill(ds);
????cmd.Parameters.Clear();
????return ds;
???}???
??}
???????
??/// <summary>
??/// 執(zhí)行指定事務(wù)的命令,指定參數(shù)值,返回DataSet.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸入?yún)?shù)和返回值.
??/// 示例.:?
??///? DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="transaction">事務(wù)</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet</returns>
??public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù)
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????// 給存儲過程參數(shù)分配值
????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion ExecuteDataset數(shù)據(jù)集命令結(jié)束
???????
??#region ExecuteReader 數(shù)據(jù)閱讀器

??/// <summary>
??/// 枚舉,標識數(shù)據(jù)庫連接是由SqlHelper提供還是由調(diào)用者提供
??/// </summary>
??private enum SqlConnectionOwnership???
??{
???/// <summary>由SqlHelper提供連接</summary>
???Internal,
???/// <summary>由調(diào)用者提供連接</summary>
???External
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的數(shù)據(jù)閱讀器.
??/// </summary>
??/// <remarks>
??/// 如果是SqlHelper打開連接,當連接關(guān)閉DataReader也將關(guān)閉.
??/// 如果是調(diào)用都打開連接,DataReader由調(diào)用都管理.
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="transaction">一個有效的事務(wù),或者為 'null'</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <param name="commandParameters">SqlParameters參數(shù)數(shù)組,如果沒有參數(shù)則為'null'</param>
??/// <param name="connectionOwnership">標識數(shù)據(jù)庫連接對象是由調(diào)用者提供還是由SqlHelper提供</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)
??{???
???if( connection == null ) throw new ArgumentNullException( "connection" );

???bool mustCloseConnection = false;
???// 創(chuàng)建命令
???SqlCommand cmd = new SqlCommand();
???try
???{
????PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????
????// 創(chuàng)建數(shù)據(jù)閱讀器
????SqlDataReader dataReader;

????if (connectionOwnership == SqlConnectionOwnership.External)
????{
?????dataReader = cmd.ExecuteReader();
????}
????else
????{
?????dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
????}
???????????
????// 清除參數(shù),以便再次使用..
????// HACK: There is a problem here, the output parameter values are fletched
????// when the reader is closed, so if the parameters are detached from the command
????// then the SqlReader can磘 set its values.
????// When this happen, the parameters can磘 be used again in other command.
????bool canClear = true;
????foreach(SqlParameter commandParameter in cmd.Parameters)
????{
?????if (commandParameter.Direction != ParameterDirection.Input)
??????canClear = false;
????}
???????????
????if (canClear)
????{
?????cmd.Parameters.Clear();
????}

????return dataReader;
???}
???catch
???{
????if( mustCloseConnection )
?????connection.Close();
????throw;
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的數(shù)據(jù)閱讀器.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
??{
???return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的數(shù)據(jù)閱讀器,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組(new SqlParameter("@prodid", 24))</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???SqlConnection connection = null;
???try
???{
????connection = new SqlConnection(connectionString);
????connection.Open();

????return ExecuteReader(connection, null, commandType, commandText, commandParameters,SqlConnectionOwnership.Internal);
???}
???catch
???{
????// If we fail to return the SqlDatReader, we need to close the connection ourselves
????if( connection != null ) connection.Close();
????throw;
???}
???????????
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的數(shù)據(jù)閱讀器,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);

????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的數(shù)據(jù)閱讀器.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名或T-SQL語句</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText)
??{
???return ExecuteReader(connection, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// [調(diào)用者方式]執(zhí)行指定數(shù)據(jù)庫連接對象的數(shù)據(jù)閱讀器,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandParameters">SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???return ExecuteReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
??}

??/// <summary>
??/// [調(diào)用者方式]執(zhí)行指定數(shù)據(jù)庫連接對象的數(shù)據(jù)閱讀器,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">T存儲過程名</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return ExecuteReader(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// [調(diào)用者方式]執(zhí)行指定數(shù)據(jù)庫事務(wù)的數(shù)據(jù)閱讀器,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText)
??{
???return ExecuteReader(transaction, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// [調(diào)用者方式]執(zhí)行指定數(shù)據(jù)庫事務(wù)的數(shù)據(jù)閱讀器,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///?? SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );

???return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
??}

??/// <summary>
??/// [調(diào)用者方式]執(zhí)行指定數(shù)據(jù)庫事務(wù)的數(shù)據(jù)閱讀器,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????AssignParameterValues(commandParameters, parameterValues);

????return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion ExecuteReader數(shù)據(jù)閱讀器

??#region ExecuteScalar 返回結(jié)果集中的第一行第一列
???????
??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
??{
???// 執(zhí)行參數(shù)為空的方法
???return ExecuteScalar(connectionString, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,指定參數(shù),返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???// 創(chuàng)建并打開數(shù)據(jù)庫連接對象,操作完成釋放對象.
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????// 調(diào)用指定數(shù)據(jù)庫連接字符串重載方法.
????return ExecuteScalar(connection, commandType, commandText, commandParameters);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,指定參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
??{
???// 執(zhí)行參數(shù)為空的方法
???return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,指定參數(shù),返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );

???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand cmd = new SqlCommand();

???bool mustCloseConnection = false;
???PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 執(zhí)行SqlCommand命令,并返回結(jié)果.
???object retval = cmd.ExecuteScalar();
???????????????
???// 清除參數(shù),以便再次使用.
???cmd.Parameters.Clear();

???if( mustCloseConnection )
????connection.Close();

???return retval;
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,指定參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText)
??{
???// 執(zhí)行參數(shù)為空的方法
???return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,指定參數(shù),返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );

???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 執(zhí)行SqlCommand命令,并返回結(jié)果.
???object retval = cmd.ExecuteScalar();
???????????????
???// 清除參數(shù),以便再次使用.
???cmd.Parameters.Clear();
???return retval;
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,指定參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// PPull the parameters for this stored procedure from the parameter cache ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion ExecuteScalar???

??#region ExecuteXmlReader XML閱讀器
??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句 using "FOR XML AUTO"</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText)
??{
???// 執(zhí)行參數(shù)為空的方法
???return ExecuteXmlReader(connection, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句 using "FOR XML AUTO"</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );

???bool mustCloseConnection = false;
???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand cmd = new SqlCommand();
???try
???{
????PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );
???????????
????// 執(zhí)行命令
????XmlReader retval = cmd.ExecuteXmlReader();
???????????
????// 清除參數(shù),以便再次使用.
????cmd.Parameters.Clear();

????return retval;
???}
???catch
???{???
????if( mustCloseConnection )
?????connection.Close();
????throw;
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(conn, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱 using "FOR XML AUTO"</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders");
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句 using "FOR XML AUTO"</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText)
??{
???// 執(zhí)行參數(shù)為空的方法
???return ExecuteXmlReader(transaction, commandType, commandText, (SqlParameter[])null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句 using "FOR XML AUTO"</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );

???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand cmd = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????
???// 執(zhí)行命令
???XmlReader retval = cmd.ExecuteXmlReader();
???????????
???// 清除參數(shù),以便再次使用.
???cmd.Parameters.Clear();
???return retval;???????????
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的SqlCommand命令,并產(chǎn)生一個XmlReader對象做為結(jié)果集返回,指定參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? XmlReader r = ExecuteXmlReader(trans, "GetOrders", 24, 36);
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??/// <returns>返回一個包含結(jié)果集的DataSet.</returns>
??public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion ExecuteXmlReader 閱讀器結(jié)束

??#region FillDataset 填充數(shù)據(jù)集
??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)</param>
??public static void FillDataset(string connectionString, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( dataSet == null ) throw new ArgumentNullException( "dataSet" );
???????????
???// 創(chuàng)建并打開數(shù)據(jù)庫連接對象,操作完成釋放對象.
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????// 調(diào)用指定數(shù)據(jù)庫連接字符串重載方法.
????FillDataset(connection, commandType, commandText, dataSet, tableNames);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集.指定命令參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??public static void FillDataset(string connectionString, CommandType commandType,
???string commandText, DataSet dataSet, string[] tableNames,
???params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( dataSet == null ) throw new ArgumentNullException( "dataSet" );
???// 創(chuàng)建并打開數(shù)據(jù)庫連接對象,操作完成釋放對象.
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????// 調(diào)用指定數(shù)據(jù)庫連接字符串重載方法.
????FillDataset(connection, commandType, commandText, dataSet, tableNames, commandParameters);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接字符串的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,指定存儲過程參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, 24);
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>???
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??public static void FillDataset(string connectionString, string spName,
???DataSet dataSet, string[] tableNames,
???params object[] parameterValues)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( dataSet == null ) throw new ArgumentNullException( "dataSet" );
???// 創(chuàng)建并打開數(shù)據(jù)庫連接對象,操作完成釋放對象.
???using (SqlConnection connection = new SqlConnection(connectionString))
???{
????connection.Open();

????// 調(diào)用指定數(shù)據(jù)庫連接字符串重載方法.
????FillDataset (connection, spName, dataSet, tableNames, parameterValues);
???}
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>???
??public static void FillDataset(SqlConnection connection, CommandType commandType,
???string commandText, DataSet dataSet, string[] tableNames)
??{
???FillDataset(connection, commandType, commandText, dataSet, tableNames, null);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??public static void FillDataset(SqlConnection connection, CommandType commandType,
???string commandText, DataSet dataSet, string[] tableNames,
???params SqlParameter[] commandParameters)
??{
???FillDataset(connection, null, commandType, commandText, dataSet, tableNames, commandParameters);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫連接對象的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,指定存儲過程參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? FillDataset(conn, "GetOrders", ds, new string[] {"orders"}, 24, 36);
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??public static void FillDataset(SqlConnection connection, string spName,
???DataSet dataSet, string[] tableNames,
???params object[] parameterValues)
??{
???if ( connection == null ) throw new ArgumentNullException( "connection" );
???if (dataSet == null ) throw new ArgumentNullException( "dataSet" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames);
???}???
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??public static void FillDataset(SqlTransaction transaction, CommandType commandType,
???string commandText,
???DataSet dataSet, string[] tableNames)
??{
???FillDataset (transaction, commandType, commandText, dataSet, tableNames, null);???
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,指定參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??public static void FillDataset(SqlTransaction transaction, CommandType commandType,
???string commandText, DataSet dataSet, string[] tableNames,
???params SqlParameter[] commandParameters)
??{
???FillDataset(transaction.Connection, transaction, commandType, commandText, dataSet, tableNames, commandParameters);
??}

??/// <summary>
??/// 執(zhí)行指定數(shù)據(jù)庫事務(wù)的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,指定存儲過程參數(shù)值.
??/// </summary>
??/// <remarks>
??/// 此方法不提供訪問存儲過程輸出參數(shù)和返回值參數(shù).
??///
??/// 示例:?
??///? FillDataset(trans, "GetOrders", ds, new string[]{"orders"}, 24, 36);
??/// </remarks>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??/// <param name="parameterValues">分配給存儲過程輸入?yún)?shù)的對象數(shù)組</param>
??public static void FillDataset(SqlTransaction transaction, string spName,
???DataSet dataSet, string[] tableNames,
???params object[] parameterValues)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( dataSet == null ) throw new ArgumentNullException( "dataSet" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果有參數(shù)值
???if ((parameterValues != null) && (parameterValues.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

????// 給存儲過程參數(shù)賦值
????AssignParameterValues(commandParameters, parameterValues);

????// 調(diào)用重載方法
????FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
???}
???else
???{
????// 沒有參數(shù)值
????FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames);
???}???
??}

??/// <summary>
??/// [私有方法][內(nèi)部調(diào)用]執(zhí)行指定數(shù)據(jù)庫連接對象/事務(wù)的命令,映射數(shù)據(jù)表并填充數(shù)據(jù)集,DataSet/TableNames/SqlParameters.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? FillDataset(conn, trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="transaction">一個有效的連接事務(wù)</param>
??/// <param name="commandType">命令類型 (存儲過程,命令文本或其它)</param>
??/// <param name="commandText">存儲過程名稱或T-SQL語句</param>
??/// <param name="dataSet">要填充結(jié)果集的DataSet實例</param>
??/// <param name="tableNames">表映射的數(shù)據(jù)表數(shù)組
??/// 用戶定義的表名 (可有是實際的表名.)
??/// </param>
??/// <param name="commandParameters">分配給命令的SqlParamter參數(shù)數(shù)組</param>
??private static void FillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,
???string commandText, DataSet dataSet, string[] tableNames,
???params SqlParameter[] commandParameters)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( dataSet == null ) throw new ArgumentNullException( "dataSet" );

???// 創(chuàng)建SqlCommand命令,并進行預(yù)處理
???SqlCommand command = new SqlCommand();
???bool mustCloseConnection = false;
???PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );
???????????????
???// 執(zhí)行命令
???using( SqlDataAdapter dataAdapter = new SqlDataAdapter(command) )
???{
???????????????
????// 追加表映射
????if (tableNames != null && tableNames.Length > 0)
????{
?????string tableName = "Table";
?????for (int index=0; index < tableNames.Length; index++)
?????{
??????if( tableNames[index] == null || tableNames[index].Length == 0 ) throw new ArgumentException( "The tableNames parameter must contain a list of tables, a value was provided as null or empty string.", "tableNames" );
??????dataAdapter.TableMappings.Add(tableName, tableNames[index]);
??????tableName += (index + 1).ToString();
?????}
????}
???????????????
????// 填充數(shù)據(jù)集使用默認表名稱
????dataAdapter.Fill(dataSet);

????// 清除參數(shù),以便再次使用.
????command.Parameters.Clear();
???}

???if( mustCloseConnection )
????connection.Close();
??}
??#endregion
???????
??#region UpdateDataset 更新數(shù)據(jù)集
??/// <summary>
??/// 執(zhí)行數(shù)據(jù)集更新到數(shù)據(jù)庫,指定inserted, updated, or deleted命令.
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? UpdateDataset(conn, insertCommand, deleteCommand, updateCommand, dataSet, "Order");
??/// </remarks>
??/// <param name="insertCommand">[追加記錄]一個有效的T-SQL語句或存儲過程</param>
??/// <param name="deleteCommand">[刪除記錄]一個有效的T-SQL語句或存儲過程</param>
??/// <param name="updateCommand">[更新記錄]一個有效的T-SQL語句或存儲過程</param>
??/// <param name="dataSet">要更新到數(shù)據(jù)庫的DataSet</param>
??/// <param name="tableName">要更新到數(shù)據(jù)庫的DataTable</param>
??public static void UpdateDataset(SqlCommand insertCommand, SqlCommand deleteCommand, SqlCommand updateCommand, DataSet dataSet, string tableName)
??{
???if( insertCommand == null ) throw new ArgumentNullException( "insertCommand" );
???if( deleteCommand == null ) throw new ArgumentNullException( "deleteCommand" );
???if( updateCommand == null ) throw new ArgumentNullException( "updateCommand" );
???if( tableName == null || tableName.Length == 0 ) throw new ArgumentNullException( "tableName" );

???// 創(chuàng)建SqlDataAdapter,當操作完成后釋放.
???using (SqlDataAdapter dataAdapter = new SqlDataAdapter())
???{
????// 設(shè)置數(shù)據(jù)適配器命令
????dataAdapter.UpdateCommand = updateCommand;
????dataAdapter.InsertCommand = insertCommand;
????dataAdapter.DeleteCommand = deleteCommand;

????// 更新數(shù)據(jù)集改變到數(shù)據(jù)庫
????dataAdapter.Update (dataSet, tableName);

????// 提交所有改變到數(shù)據(jù)集.
????dataSet.AcceptChanges();
???}
??}
??#endregion

??#region CreateCommand 創(chuàng)建一條SqlCommand命令
??/// <summary>
??/// 創(chuàng)建SqlCommand命令,指定數(shù)據(jù)庫連接對象,存儲過程名和參數(shù).
??/// </summary>
??/// <remarks>
??/// 示例:?
??///? SqlCommand command = CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="sourceColumns">源表的列名稱數(shù)組</param>
??/// <returns>返回SqlCommand命令</returns>
??public static SqlCommand CreateCommand(SqlConnection connection, string spName, params string[] sourceColumns)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 創(chuàng)建命令
???SqlCommand cmd = new SqlCommand( spName, connection );
???cmd.CommandType = CommandType.StoredProcedure;

???// 如果有參數(shù)值
???if ((sourceColumns != null) && (sourceColumns.Length > 0))
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);

????// 將源表的列到映射到DataSet命令中.
????for (int index=0; index < sourceColumns.Length; index++)
?????commandParameters[index].SourceColumn = sourceColumns[index];

????// Attach the discovered parameters to the SqlCommand object
????AttachParameters (cmd, commandParameters);
???}

???return cmd;
??}
??#endregion

??#region ExecuteNonQueryTypedParams 類型化參數(shù)(DataRow)
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接字符串的存儲過程,使用DataRow做為參數(shù)值,返回受影響的行數(shù).
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQueryTypedParams(String connectionString, String spName, DataRow dataRow)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???// 如果row有值,存儲過程必須初始化.
???if (dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????????????????????
????return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接對象的存儲過程,使用DataRow做為參數(shù)值,返回受影響的行數(shù).
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQueryTypedParams(SqlConnection connection, String spName, DataRow dataRow)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if (dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????????????????????
????return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫事物的存儲過程,使用DataRow做為參數(shù)值,返回受影響的行數(shù).
??/// </summary>
??/// <param name="transaction">一個有效的連接事務(wù) object</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回影響的行數(shù)</returns>
??public static int ExecuteNonQueryTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// Sf the row has values, the store procedure parameters must be initialized
???if (dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????????????????????
????return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
???}
??}
??#endregion

??#region ExecuteDatasetTypedParams 類型化參數(shù)(DataRow)
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接字符串的存儲過程,使用DataRow做為參數(shù)值,返回DataSet.
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回一個包含結(jié)果集的DataSet.</returns>
??public static DataSet ExecuteDatasetTypedParams(string connectionString, String spName, DataRow dataRow)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???//如果row有值,存儲過程必須初始化.
???if ( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接對象的存儲過程,使用DataRow做為參數(shù)值,返回DataSet.
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回一個包含結(jié)果集的DataSet.</returns>
??///
??public static DataSet ExecuteDatasetTypedParams(SqlConnection connection, String spName, DataRow dataRow)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫事務(wù)的存儲過程,使用DataRow做為參數(shù)值,返回DataSet.
??/// </summary>
??/// <param name="transaction">一個有效的連接事務(wù) object</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回一個包含結(jié)果集的DataSet.</returns>
??public static DataSet ExecuteDatasetTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
???}
??}

??#endregion

??#region ExecuteReaderTypedParams 類型化參數(shù)(DataRow)
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接字符串的存儲過程,使用DataRow做為參數(shù)值,返回DataReader.
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReaderTypedParams(String connectionString, String spName, DataRow dataRow)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???// 如果row有值,存儲過程必須初始化.
???if ( dataRow != null && dataRow.ItemArray.Length > 0 )
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
???}
??}

???????????????
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接對象的存儲過程,使用DataRow做為參數(shù)值,返回DataReader.
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName);
???}
??}
???????
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫事物的存儲過程,使用DataRow做為參數(shù)值,返回DataReader.
??/// </summary>
??/// <param name="transaction">一個有效的連接事務(wù) object</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回包含結(jié)果集的SqlDataReader</returns>
??public static SqlDataReader ExecuteReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0 )
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName);
???}
??}
??#endregion

??#region ExecuteScalarTypedParams 類型化參數(shù)(DataRow)
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接字符串的存儲過程,使用DataRow做為參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalarTypedParams(String connectionString, String spName, DataRow dataRow)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
???????????
???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接對象的存儲過程,使用DataRow做為參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalarTypedParams(SqlConnection connection, String spName, DataRow dataRow)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫事務(wù)的存儲過程,使用DataRow做為參數(shù)值,返回結(jié)果集中的第一行第一列.
??/// </summary>
??/// <param name="transaction">一個有效的連接事務(wù) object</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回結(jié)果集中的第一行第一列</returns>
??public static object ExecuteScalarTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
???}
??}
??#endregion

??#region ExecuteXmlReaderTypedParams 類型化參數(shù)(DataRow)
??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫連接對象的存儲過程,使用DataRow做為參數(shù)值,返回XmlReader類型的結(jié)果集.
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
???}
??}

??/// <summary>
??/// 執(zhí)行指定連接數(shù)據(jù)庫事務(wù)的存儲過程,使用DataRow做為參數(shù)值,返回XmlReader類型的結(jié)果集.
??/// </summary>
??/// <param name="transaction">一個有效的連接事務(wù) object</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="dataRow">使用DataRow作為參數(shù)值</param>
??/// <returns>返回XmlReader結(jié)果集對象.</returns>
??public static XmlReader ExecuteXmlReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
??{
???if( transaction == null ) throw new ArgumentNullException( "transaction" );
???if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???// 如果row有值,存儲過程必須初始化.
???if( dataRow != null && dataRow.ItemArray.Length > 0)
???{
????// 從緩存中加載存儲過程參數(shù),如果緩存中不存在則從數(shù)據(jù)庫中檢索參數(shù)信息并加載到緩存中. ()
????SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
???????????????
????// 分配參數(shù)值
????AssignParameterValues(commandParameters, dataRow);
???????????????
????return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
???}
???else
???{
????return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
???}
??}
??#endregion

?}

?/// <summary>
?/// SqlHelperParameterCache提供緩存存儲過程參數(shù),并能夠在運行時從存儲過程中探索參數(shù).
?/// </summary>
?public sealed class SqlHelperParameterCache
?{
??#region 私有方法,字段,構(gòu)造函數(shù)
??// 私有構(gòu)造函數(shù),妨止類被實例化.
??private SqlHelperParameterCache() {}

??// 這個方法要注意
??private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());

??/// <summary>
??/// 探索運行時的存儲過程,返回SqlParameter參數(shù)數(shù)組.
??/// 初始化參數(shù)值為 DBNull.Value.
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接</param>
??/// <param name="spName">存儲過程名稱</param>
??/// <param name="includeReturnValueParameter">是否包含返回值參數(shù)</param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???SqlCommand cmd = new SqlCommand(spName, connection);
???cmd.CommandType = CommandType.StoredProcedure;

???connection.Open();
???// 檢索cmd指定的存儲過程的參數(shù)信息,并填充到cmd的Parameters參數(shù)集中.
???SqlCommandBuilder.DeriveParameters(cmd);
???connection.Close();
???// 如果不包含返回值參數(shù),將參數(shù)集中的每一個參數(shù)刪除.
???if (!includeReturnValueParameter)
???{
????cmd.Parameters.RemoveAt(0);
???}
???????????????
???// 創(chuàng)建參數(shù)數(shù)組
???SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count];
???// 將cmd的Parameters參數(shù)集復(fù)制到discoveredParameters數(shù)組.
???cmd.Parameters.CopyTo(discoveredParameters, 0);

???// 初始化參數(shù)值為 DBNull.Value.
???foreach (SqlParameter discoveredParameter in discoveredParameters)
???{
????discoveredParameter.Value = DBNull.Value;
???}
???return discoveredParameters;
??}

??/// <summary>
??/// SqlParameter參數(shù)數(shù)組的深層拷貝.
??/// </summary>
??/// <param name="originalParameters">原始參數(shù)數(shù)組</param>
??/// <returns>返回一個同樣的參數(shù)數(shù)組</returns>
??private static SqlParameter[] CloneParameters(SqlParameter[] originalParameters)
??{
???SqlParameter[] clonedParameters = new SqlParameter[originalParameters.Length];

???for (int i = 0, j = originalParameters.Length; i < j; i++)
???{
????clonedParameters[i] = (SqlParameter)((ICloneable)originalParameters[i]).Clone();
???}

???return clonedParameters;
??}

??#endregion 私有方法,字段,構(gòu)造函數(shù)結(jié)束

??#region 緩存方法

??/// <summary>
??/// 追加參數(shù)數(shù)組到緩存.
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符串</param>
??/// <param name="commandText">存儲過程名或SQL語句</param>
??/// <param name="commandParameters">要緩存的參數(shù)數(shù)組</param>
??public static void CacheParameterSet(string connectionString, string commandText, params SqlParameter[] commandParameters)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( commandText == null || commandText.Length == 0 ) throw new ArgumentNullException( "commandText" );

???string hashKey = connectionString + ":" + commandText;

???paramCache[hashKey] = commandParameters;
??}

??/// <summary>
??/// 從緩存中獲取參數(shù)數(shù)組.
??/// </summary>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符</param>
??/// <param name="commandText">存儲過程名或SQL語句</param>
??/// <returns>參數(shù)數(shù)組</returns>
??public static SqlParameter[] GetCachedParameterSet(string connectionString, string commandText)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( commandText == null || commandText.Length == 0 ) throw new ArgumentNullException( "commandText" );

???string hashKey = connectionString + ":" + commandText;

???SqlParameter[] cachedParameters = paramCache[hashKey] as SqlParameter[];
???if (cachedParameters == null)
???{???????????
????return null;
???}
???else
???{
????return CloneParameters(cachedParameters);
???}
??}

??#endregion 緩存方法結(jié)束

??#region 檢索指定的存儲過程的參數(shù)集

??/// <summary>
??/// 返回指定的存儲過程的參數(shù)集
??/// </summary>
??/// <remarks>
??/// 這個方法將查詢數(shù)據(jù)庫,并將信息存儲到緩存.
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符</param>
??/// <param name="spName">存儲過程名</param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??public static SqlParameter[] GetSpParameterSet(string connectionString, string spName)
??{
???return GetSpParameterSet(connectionString, spName, false);
??}

??/// <summary>
??/// 返回指定的存儲過程的參數(shù)集
??/// </summary>
??/// <remarks>
??/// 這個方法將查詢數(shù)據(jù)庫,并將信息存儲到緩存.
??/// </remarks>
??/// <param name="connectionString">一個有效的數(shù)據(jù)庫連接字符.</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="includeReturnValueParameter">是否包含返回值參數(shù)</param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??public static SqlParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
??{
???if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???using(SqlConnection connection = new SqlConnection(connectionString))
???{
????return GetSpParameterSetInternal(connection, spName, includeReturnValueParameter);
???}
??}

??/// <summary>
??/// [內(nèi)部]返回指定的存儲過程的參數(shù)集(使用連接對象).
??/// </summary>
??/// <remarks>
??/// 這個方法將查詢數(shù)據(jù)庫,并將信息存儲到緩存.
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接字符</param>
??/// <param name="spName">存儲過程名</param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName)
??{
???return GetSpParameterSet(connection, spName, false);
??}

??/// <summary>
??/// [內(nèi)部]返回指定的存儲過程的參數(shù)集(使用連接對象)
??/// </summary>
??/// <remarks>
??/// 這個方法將查詢數(shù)據(jù)庫,并將信息存儲到緩存.
??/// </remarks>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="includeReturnValueParameter">
??/// 是否包含返回值參數(shù)
??/// </param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???using (SqlConnection clonedConnection = (SqlConnection)((ICloneable)connection).Clone())
???{
????return GetSpParameterSetInternal(clonedConnection, spName, includeReturnValueParameter);
???}
??}

??/// <summary>
??/// [私有]返回指定的存儲過程的參數(shù)集(使用連接對象)
??/// </summary>
??/// <param name="connection">一個有效的數(shù)據(jù)庫連接對象</param>
??/// <param name="spName">存儲過程名</param>
??/// <param name="includeReturnValueParameter">是否包含返回值參數(shù)</param>
??/// <returns>返回SqlParameter參數(shù)數(shù)組</returns>
??private static SqlParameter[] GetSpParameterSetInternal(SqlConnection connection, string spName, bool includeReturnValueParameter)
??{
???if( connection == null ) throw new ArgumentNullException( "connection" );
???if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );

???string hashKey = connection.ConnectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter":"");

???SqlParameter[] cachedParameters;
???????????
???cachedParameters = paramCache[hashKey] as SqlParameter[];
???if (cachedParameters == null)
???{???
????SqlParameter[] spParameters = DiscoverSpParameterSet(connection, spName, includeReturnValueParameter);
????paramCache[hashKey] = spParameters;
????cachedParameters = spParameters;
???}
???????????
???return CloneParameters(cachedParameters);
??}
???????
??#endregion 參數(shù)集檢索結(jié)束

?}
}

?

SqlHelper(帶詳細中文注釋)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产日韩一区二区三区 | 国产又大又黑又粗免费视频 | av制服丝袜白丝国产网站 | 久久66热这里只有精品 | 免费人妻无码不卡中文18禁 | 久久久久久中文字幕有精品 | 国内一级视频 | 久激情内射婷内射蜜桃人妖 | 女女同性女同一区二区三区九色 | 午夜午夜精品一区二区三区文 | 中文字幕在线观看日本 | 无码人妻精品丰满熟妇区 | 国产91成人欧美精品另类动态 | 久久精品99久久香蕉国产色戒 | 99久久夜色精品国产亚洲1000部 | 韩日av在线播放 | 国偷自产av一区二区三区 | 夜夜撸日日操 | 日韩在线第三页 | 欧美一区二区三区免费看 | 天天干夜夜夜 | 农民人伦一区二区三区剧情简介 | 日韩中文字幕在线 | 亚瑟av亚洲精品一区二区 | 亚洲人成日韩中文字幕不卡 | 亚洲精品无码专区在线观看 | 国产偷人妻精品一区 | 国产又粗又猛又爽又黄的视频文字 | 亚洲 欧美 日韩 在线 | 亚洲免费看av | 久视频在线观看 | 欧美性xxxxx极品少妇直播 | 福利一区二区三区视频在线观看 | 亚洲成αv人片在线观看 | 日韩一区二区三区av | 久久精品99久久香蕉国产 | 深夜男女福利18免费软件 | 亚洲国产精品成人久久久麻豆 | 在线看成人av | 日本美女毛片 | 131美女爱做视频国产福利 | 久久天天综合桃花久久 | 99re思思| 亚洲免费福利视频 | 无码国产精品久久一区免费 | 欧美成人精品第一区 | 亚洲高潮喷水无码av电影 | 亚洲欧洲国产综合aⅴ无码 自拍视频第一页 | 老熟女激烈的高潮 | 免费观看全黄做爰的视频 | 久久一本人碰碰人碰 | 毛片国产 | 加藤あやのav免费观看 | 天堂69堂在线精品视频软件 | 色视频亚洲 | 国产福利在线视频观看 | 国产69精品久久久久99尤物 | 日本不卡一区在线观看 | 国产在线拍揄自揄视频菠萝 | 午夜在线观看av | 在线看片福利无码网址 | 国产精品影音先锋 | 国产精品高潮呻吟av久久黄 | 国产精品久久久久野外 | 一级片在线免费看 | 黄色片在线观看网站 | 少妇下蹲下露大唇58 | 亚洲欧洲精品成人久久曰 | 国产粉嫩尤物极品99综合精品 | 亚洲高清专区日韩精品 | 成人午夜精品福利 | 国产目拍亚洲精品一区二区 | 婷婷亚洲一区 | 日韩无码在钱中文字幕在钱视频 | 99精品电影一区二区免费看 | 手机版av | 在线播放午夜理论片 | 国产一线大片 | 久草在线视频网站 | 俺来也俺去啦久久综合网 | 欧美1区2区3区视频 亚洲av禁18成人毛片一级在线 | 免费无码a片一区二三区 | 激情六月色 | 久久久久无码精品国产 | 四虎在线精品 | 国产无套丰满白嫩对白 | 无码人妻久久一区二区三区 | 尤物永久网站 | 伊人网综合 | 欧美日韩网址 | 欧美久久免费 | 色女人网 | a级片中文字幕 | 牛牛免费在线视频 | 激情综合在线观看 | 日韩在线毛片 | 国产 中文 字幕 日韩 在线 | 亚洲精品国产成人av蜜臀 | 国产欧美日韩精品在线 | 国产91对白在线播放九色 | 色哟哟18免费影视 | 国产又粗又黄又爽又硬的视频 | 狠狠躁夜夜人人爽天96 | 国产熟女出轨做受的叫床声 | 亚洲欧美洲成人一区二区三区 | 日本免费精品视频 | 羞羞视频免费在线看 | 青青视频精品观看视频 | 米奇777超碰欧美日韩亚洲 | 国产综合视频在线观看 | 大小组在线播放av | 国产精品久久福利网站 | 日日噜噜夜夜狠狠久久av小说 | 婷婷综合激情网 | 秋霞伊人网 | 国产日产欧产美韩系列麻豆 | 国产成本人片无码免费 | 精品国产免费一区二区三区 | 日本肉体xxⅹ裸体交 | 天天干天天干天天 | 免费观看av网站 | 麻豆国产av尤物网站尤物 | 日本三不卡 | 4438x成人网一全国最大色成网站 | 亲子乱aⅴ一区二区三区 | 精品国产黑色丝袜高跟鞋 | 亚洲一区自拍偷拍 | 性一交一乱一精一晶 | 天天玩天天干天天操 | 久久a免费视频 | 日韩欧美中字 | 无码人妻一区二区三区免费看 | 亚洲国产成人精品无码区在线网站 | 久久久久无码国产精品一区 | 亚洲精品久久久久中文字幕一区 | 婷婷丁香五月缴情视频 | 久久无码中文字幕久久无码app | 亚州av色图 | 91网站免费在线观看 | 夜夜添夜夜添夜夜摸夜夜摸 | 无码视频免费一区二区三区 | 大陆三级午夜理伦三级三 | 欧美在线观看一区 | 亚洲另类网 | 无码人妻丰满熟妇区10p | 国内精品久久久久久影院8f | qvod在线观看视频 | 日韩第一页在线观看 | sb少妇高潮二区久久久久 | 三上悠亚在线一区 | 亚洲色大成网站www 97在线免费公开视频 | 欧美精品久久久久久久监狱 | 欧美色婷婷 | 久久国产精品娇妻素人 | 中文字幕精品在线播放 | 在线免费观看a视频 | 伊人成人在线观看 | 午夜视频福利 | 成年人av网站 | 国产区一区二区三 | 国产两女互慰高潮视频在线观看 | 中文字幕巨乳 | 久久免费高清视频 | 爆爽久久久一区二区又大又黄又嫩 | 乱码一卡二卡新区永久入口 | 深夜福利在线免费观看 | 每日在线更新av | 中文亚洲爆乳av无码专区 | 国产xxxx69真实实拍 | 国产日韩欧美不卡在线二区 | www.91tv | 无遮挡很爽很污很黄的网站 | 国产沙发午睡系列999 | 人妻少妇久久中文字幕一区二区 | 国产美女爽到尿喷出来视频 | 高清乱码男女免费观看 | 亚洲第一成人久久网站 | 国产制服丝袜欧美在线观看 | 野花国产精品入口 | 国产免费一区二区三区在线播放 | 手机版av | 乱中年女人伦av三区 | 在线精品亚洲一区二区动态图 | 狠狠鲁视频 | 又色又爽又高潮免费视频观看酒店 | 波多野结衣一区二区免费视频 | 国产精品电影久久久久电影网 | 绯色av蜜臀一区二区中文字幕 | 久久久久黄色 | 欧美日韩国产色综合视频 | 日本无码欧美一区精品久久 | 在线播放成人av | 午夜理伦三级理论三级 | 免费中文字幕日韩欧美 | 亚洲一区二区日本泷泽萝拉 | 国产日产欧美一区二区三区 | 后进极品美女白嫩翘臀视频 | 成人无码视频免费播放 | 免费看毛片的网站 | 日日噜噜夜夜狠狠视频无码日韩 | 欧美综合在线激情专区 | 伊人网在线 | 一区二区激情日韩五月天 | 青青草在线视频免费观看 | 欧美综合在线观看视频 | 久久午夜无码鲁丝片秋霞 | 东京热久久综合伊人av | 男人都懂的网址 | 日韩国产亚洲一区二区三区 | 青青草原国产免费 | 99久久久久国产精品免费 | 一级做a爱片性色毛片高清 欧美精品videosex极品 | 99精品欧美一区二区三区 | 国精品午夜福利视频不卡757 | 午夜男女爽爽影院免费视频 | 狠狠艹狠狠干 | 亚洲国产精久久久久久久 | 国产女爽爽精品视频天美传媒 | 77tv色成人| 久久久久琪琪去精品色无码 | 色婷婷狠狠久久综合五月 | 国产对白叫床清晰在线播放 | 国产色拍拍拍拍在线精品 | 国产成人啪精品视频免费网站软件 | 精品视频9999 | 中日韩一线二线三线视频 | 欧美福利视频在线观看 | 国内揄拍国产精品人妻门事件 | 午夜理论电影在线观看亚洲 | 免费乱理伦片在线观看八戒 | 日韩视频免费看 | 天天插av| 国产成人精品a视频一区 | 精品99久久久久久 | 99久久夜色精品国产亚洲1000部 | 一二三四在线视频观看社区 | 国产精品国产三级国产专播精品人 | 国产精品久久久久久久久动漫 | 午夜高清免费视频 | 亚洲成年轻人电影网站www | 午夜色福利 | 亚洲99影视一区二区三区 | 青青草狠狠干 | 无码精品一区二区三区在线 | 日日夜夜影院 | 2018天天干天天操 | 成熟老妇女视频 | 中文字幕精品一区二区精品 | 欧美高清一区三区在线专区 | 免费三级在线 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 亚洲国产日韩在线 | 亚洲乱码中文字幕综合234 | 欧美成人小视频 | 亚洲午夜成人精品无码app | 久久综合国产乱子伦精品免费 | 亚洲成av人片天堂网无码 | 色婷婷中文字幕 | 久久综合精品无码av一区二区三区 | 十大喷奶水番号 | 丰满人妻跪趴高撅肥臀 | 国产精品爱久久久久久久 | 五月婷婷丁香激情 | 久久久久久久久久久久久久av | 日韩精品一区二区在线观看 | 伊人久久精品久久亚洲一区 | aaa一级黄色片 | 免费看黄在线网站 | 亚洲综合欧美在线一区在线播放 | 精品少妇爆乳无码aⅴ区 | 国产艳妇av视国产精选av一区 | 爱色视频 | 四虎地址| 欧美日韩一二三区 | 一个色综合久久 | 调教驯服丰满美艳麻麻在线视频 | 亚洲成a人蜜臀av在线播放 | 手机在线观看av网站 | av不卡国产在线观看 | 爱爱一区二区三区 | 国产狂喷水潮免费网站www | 日韩视频在线观看视频 | 国产一区二区在线视频观看 | 日韩人妻中文无码一区二区七区 | 国产免费拔擦拔擦8x高清在线人 | 欧美一级久久 | 大学生高潮无套内谢视频 | 中文字幕丰满孑伦无码精品 | 天干夜天干天天天爽视频 | av人摸人人人澡人人超碰 | 日本高清久久 | 免费无码十八禁污污网站 | 国产动作大片中文字幕 | 国产片久久 | 一区二区三区国产在线 | 日韩内射美女人妻一区二区三区 | 国产色综合天天综合网 | 成人高潮片免费 | 久久久久免费精品国产小说色大师 | 99久久精品费精品国产一区二 | 蜜色av| 五月天色片 | 久久人妻夜夜做天天爽 | 欧美成人吸奶水做爰 | 免费最爽乱淫无遮挡 | 香蕉人妻av久久久久天天 | 999在线视频| 免费久久久 | 97夜夜澡人人双人人人喊 | 精品人妻无码专区在中文字幕 | 手机看片福利永久 | 末发育娇小性色xxxxx | 国产微拍无码精品一区 | 国产日产欧产精品精品蜜芽 | 久荜中文字幕 | 另类专区亚洲 | 精品日韩欧美一区二区在线播放 | 4438ⅹ亚洲全国最大色丁香 | av片亚洲国产男人的天堂 | 亚洲剧情在线 | 久久免费看a级毛毛片 | 国产精品 视频一区 二区三区 | 亚洲成a人片在线观看天堂 青青国产在线视频 | 奇米影音先锋 | 国产精品亚洲欧美 | 综合 欧美 亚洲日本 | 久久午夜神器 | 国产一区999 | 日日免费视频 | 女人爽到高潮的免费视频 | 国产馆在线观看 | 色窝窝无码一区二区三区 | 成人乱淫av日日摸夜夜爽 | 天天操欧美 | 伊在人天堂亚洲香蕉精品区 | 色婷婷激婷婷深爱五月 | 国产欧美大片 | 日本欧美国产在线 | 亚洲熟妇av一区二区三区 | 亚洲超清无码制服丝袜无广告 | 久久精品aⅴ无码中文字字幕 | 特级毛片全部免费播放 | 午夜性又黄又爽免费看尤物 | 精品韩国一级久久 | 青草精品视频 | 夜夜国产亚洲视频香蕉 | 有码中文av无码中文av | 1024久久| 日本在线色视频 | 777精品出轨人妻国产 | 日韩精品一区二区三区第95 | 一区二区三区四区在线免费观看 | 岛国黄色av| 婷婷色中文网 | 午夜国人精品av免费看 | av高清在线免费观看 | 国产美女无遮挡裸色视频 | 亚洲国产精品无码观看久久 | 免费成人在线视频网站 | 96免费视频| 日韩在线观看视频免费 | 中文字幕黄色片 | 亚洲色成人网站www永久尤物 | 看毛片网站 | 国产一区二区三区成人 | 色av永久无码影院av | 在线观看视频一区二区三区 | 91精品国产乱码久久久久 | 欧美日本一二三 | 夜夜操操操 | 国产超碰人人爽人人做人人添 | 欧美黄色专区 | 亚洲国产成人精品福利在线观看 | 亚洲卡一卡二乱码新区仙踪 | 欧美 国产 综合 欧美 视频 | 国产无套内射普通话对白 | 欧美激情偷拍 | 久久综合给合久久狠狠狠97色69 | 日韩国产网曝欧美第一页 | 精品久久免费观看 | 大桥未久一区 | 91插插库 | 又爽又大久久久级淫片毛片 | 亚洲国产精品99久久久久久久久 | 久久久久青草线蕉综合超碰 | 色综合综合 | 中国中文字幕伦av在线看片 | 久久无码人妻影院 | 动漫成人无码免费视频在线播 | 中文成人久久久久影院免费观看 | 国产春色| 一区二区三区四区产品乱码在线观看 | 欧美性猛交xxxx乱大交蜜桃 | 高跟鞋av| 91精品久久久久久久久久入口 | 三上悠亚在线精品二区 | 无码aⅴ免费中文字幕久久 av无码精品一区二区三区三级 | 91av在线播放视频 | 亚洲国产欧美国产综合一区 | 亚洲欧美日韩在线资源观看 | 亚洲字幕在线观看 | 亚洲免费播放 | 中文乱字幕视频一区 | 亚洲国产另类久久久精品网站 | 男女啪啪免费体验区 | 欧美一区二区三区少妇p | 手机在线观看av网站 | 毛片网站在线播放 | 国产字幕在线观看 | 日韩在线网 | 夜色毛片永久免费 | 丝袜 亚洲 另类 欧美 重口 | 久一视频在线观看 | 东北妇女精品bbwbbw | 91tv永久入口 | 久久不见久久见免费影院视频观看 | 色欲老女人人妻综合网 | 亚洲欧美色国产综合 | 午夜福利av无码一区二区 | 亚洲国产成人乱码 | 日本理论片在线播放 | 蜜臀av99无码精品国产专区 | 一区二区三区在线免费看 | 性久久久久久久 | 国产91精品久久久久久久网曝门 | 麻豆国产va免费精品高清在线 | 99美国热| 无码午夜人妻一区二区三区不卡视频 | 97人妻碰碰碰久久久久禁片 | 日韩精品成人无码专区免费 | 可以直接看的毛片 | 国产午夜精品一区二区 | 欧美特黄aaaaaaaa大片 | 欧美理论影院 | 亚洲中文欧美在线视频 | 久久福利 | 国产精品久久久久成人 | 亚洲色婷婷久久精品av蜜桃久久 | 一区二区 中文字幕 | 欧美多人片高潮野外做片黑人 | 日韩欧美在线中文字幕 | 午夜不卡无码中文字幕影院 | 在线高清亚洲精品二区 | 国产传媒一本之道 | 亚洲人成网线在线播放 | 婷婷综合在线 | 激情小说激情视频 | 精品国产一区二区三区在线观看 | 午夜网站在线 | 天天爽夜夜爽国产精品视频 | 9久久9毛片又大又硬又粗 | 亚洲国产成av人天堂无码 | 久久aⅴ人妻少妇嫩草影院 无码超乳爆乳中文字幕 | 中文字幕久久波多野结衣av不卡 | 欧美一级片黄色 | 少妇荡乳 | 特黄做受又硬又粗又大视频小说 | 国产成人a∨麻豆精品 | 97视频人人澡人人爽 | 亚洲免费激情 | 老牛嫩草一区二区三区的功能介绍 | 免费国产黄网站在线看 | 99热精品久久只有精品 | 青青综合网 | 国产精品亚洲专区无码导航 | 91精品国产乱码久久久久久张柏芝 | 天天射天天噜 | 国产男女av | 亚洲精品无码专区在线 | 在线a网| 国产亚洲精品久久久久久禁果tv | 亚洲精品乱码久久久久久中文字幕 | 99国语露脸久久精品国产ktv | 97精品尹人久久大香线蕉 | 国产99视频精品免费视频6 | 动漫精品一区二区 | 欧美激情喂奶xxxxx | 久久久久久国产精品久久 | 夜夜夜夜骑 | 印度女人狂野牲交 | 国产午夜精品一区二区三区极品 | 强伦姧人妻免费无码电影 | 好爽好大久久久级淫片毛片小说 | 亚洲成a人片在线观看无码下载 | 日本免费在线观看视频 | 国产精品系列无码专区 | 总裁各种姿势顶弄呻吟h1v1 | 国产+日韩+另类+视频一区 | 婷婷成人综合激情在线视频播放 | 喷奶水榨乳一区二区播放 | 香蕉精品亚洲二区在线观看 | 国产综合精品一区二区三区 | 成人免费午夜视频69影院 | 国产成人久久婷婷精品流白浆 | 日本久久中文 | 欧美精品一区二区三区很污很色的 | 国产精品福利视频推女郎 | 国产精品手机在线播放 | 国产精品美女www爽爽爽三炮 | 中文字幕日本乱码仑区在线 | 120秒日本爱爱动态图 | 国产人妻精品一区二区三区 | 成人欧美一区二区三区视频 | 伊人久久大香线蕉av色 | 自拍三区 | 亚洲三级免费 | 欧美亚洲视频一区 | 成人亚洲欧美激情在线电影 | 成年日韩片av在线网站 | 日韩人妻无码精品一专区二区三区 | 久久免费只有精品国产 | 久久人人人 | 精品麻豆国产色欲色欲色欲www | 国产艹逼视频 | 亚洲第四页 | 国产情侣久久久久aⅴ免费 五月婷婷激情久久 | 国产女爽爽精品视频天美传媒 | 露脸叫床粗话东北少妇 | 日本中文字幕乱码免费 | 亚洲第一区精品 | 国产精品 经典三级 亚洲 | 四虎最新免费网址 | 亚洲精品久久久 | 久久久久久久久久久久久久久久久久久久 | 精品久久伊人 | 中文字幕亚洲在线 | 精品国产av无码一道 | 日韩精品视频网 | 亚洲a免费| 99热爱久久99热爱九九热爱 | 精品国产乱码久久久久久蜜臀网站 | 开心五月色婷婷综合开心网 | 少妇高潮喷水久久久久久久久久 | 日韩毛片一区 | 嫩草综合 | 亚洲精品国产99 | 99视频国产精品免费观看 | 亚洲二区在线 | 日韩精品无码视频一区二区蜜桃 | 国产精品久久精品三级 | www.91久久| 国产极品白嫩精品 | 日韩欧美一区二区三区, | 131美女爱做视频 | 精品+无码+在线观看 | av网站在线观看不卡 | 四虎影库在线永久影院免费观看 | 亚洲精品第一国产综合国服瑶 | 一卡二卡3卡四卡网站精品 国产精品成人国产乱一区 日本a级免费 | 日韩精品在线观看一区二区三区 | 国产一级爱c视频 | 粉嫩av一区二区三区四区免费 | 国产69精品久久久久久久 | 春意影院福利社 | 性色做爰片在线观看ww | 国产一区二区播放 | 精品久久二区 | 求av网址 | 日本特级大片 | 永久av| 亚洲熟妇av综合网五月 | 91精品国产综合久久精品图片 | 精品国产一区二区三区久久久蜜臀 | 青娱乐极品视觉盛宴国产视频 | 中文无码精品一区二区三区 | 成人性生交大全免费中文版 | 一集黄色片 | 私人成片免费观看 | 国产亚洲网曝欧美台湾丝袜 | 四虎成人精品永久在线视频 | 亚洲中文字幕乱码一区 | 欧美人与禽猛交乱配视频 | 看国产一毛片在线看手机看 | 国产色欲婬乱免费视频软件 | yw免费看妹子超在线 | 成年女人黄网站色视频免费97 | 久久不见久久见免费影院 | a级黄色录相 | 天天操天天干天天插 | 国产精品18久久久久vr手机版特色 | 精品av天堂毛片久久久 | 亚洲第一色 | 黄色福利视频网站 | 欧美日韩国产一区二区三区不卡 | 亚洲爆乳无码专区www | 日本亚洲色大成网站www | 日韩精品高清在线观看 | 国产人成看黄久久久久久久久 | 国产精品综合久久久精品综合蜜臀 | 日日噜噜噜夜夜爽爽狠狠同性男 | 爱情岛论坛自拍亚洲品质极速福利 | 激情春色网 | 囯产精品一区二区三区线 | 欧美成aⅴ人高清免费观看 国产作爱激烈叫床视频 | 国产亚洲精品久久久97蜜臀 | 一区二区三区视频在线观看免费 | 天天综合网天天综合 | 欧美日韩在线网站 | 国产男女自拍 | 精品人妻系列无码一区二区三区 | 久久人妻少妇嫩草av蜜桃 | 亚洲精品无码久久久久久 | 插插无码视频大全不卡网站 | 日本韩国欧美 | 欧美亚洲国产日韩 | 国产黄色片一级 | 久久久精品人妻一区二区三区蜜桃 | 中文在线视频 | 日本免费黄色小视频 | 亚洲久久中文字幕www网站 | 日韩精品亚洲人成在线观看 | 91久久天天躁狠狠躁夜夜 | 久久亚洲精中文字幕冲田杏梨 | 国产第69页 | 日韩裸体人体欣赏pics | 欧美日韩亚洲国产 | 国产激情电影综合在线看 | 亚洲欧洲日产国码无码网站 | 亚洲线精品一区二区三区影音先锋 | 中文无码热在线视频 | 久久国产精 | 伊人精品无码一区二区三区电影 | 亚洲性生活网站 | 90后极品粉嫩小泬20p | 成人在线观看黄色 | 综合天堂av久久久久久久 | 欧美999| 中国av在线 | 黄色三级短视频 | 四色成人av永久网址 | 综合国产一区 | 久久aⅴ国产欧美74aaa | 欧美日韩理论 | 侵犯女教师一区二区三区 | 成人精品毛片 | 欧美wwwcom| 狠狠色狠狠色综合人人 | 欧美人妖出精汇编大全 | 激情五月婷婷网 | 婷丁五月 | 久久久精品视频免费看 | 亚洲成在人线在线播放无码vr | 午夜乱蜜桃久久久乱 | caopeng在线视频 | av播放网址 | 国产又黄又 | 色爱无码av综合区老司机非洲 | 日本a网站 | 男女精品国产乱淫高潮 | 国产精品天干天干综合网 | 国产肥老妇视频 | 日韩精品天堂 | 偷偷操影院| aa片在线观看视频在线播放 | 午夜男人 | 日韩无砖专区2021嘟嘟网 | 日韩二级毛片 | 国精产品999国精产 波多野结衣久久精品 | 久99视频精品免费观看福利 | 亚洲香蕉| 女人爽得直叫免费视频 | 欧美饥渴熟妇高潮喷水水 | 国产精品宾馆在线精品酒店 | 男人的午夜天堂 | 日产中文字幕在线观看 | 中文字幕在 | 久久四色 | 天天摸天天做天天爽2020 | www.亚洲国产| 日产精品卡2卡三卡乱码网站 | 激情综合网五月天 | 国产在线自 | 饥渴少妇高潮视频大全 | 国产精品久久久久久tv | 爱爱激情免费视频 | 45分钟免费真人视频 | 国产精品对白久久久久粗 | av男人天堂网 | 日本三级电线 | 亚洲自拍偷拍综合 | 日本亚洲vr欧美不卡高清专区 | 久久99久国产麻精品66 | 成人免费观看做爰视频ⅹxx | 中文字幕av无码一区二区三区电影 | a级在线免费观看 | 国产无套护士在线观看 | 国产女高清在线看免费观看 | 岛国精品一区免费视频在线观看 | 国产精品日本一区二区不卡视频 | 婷婷香蕉| av一本久道久久综合久久鬼色 | 一区二区国产精品精华液 | 色老头av| 色综合天天综合网中文 | 三上悠亚在线日韩精品 | 免费无码影视在线观看mov | 好大好猛好爽好深视频免费 | 香港日本韩国三级网站 | 日本亚洲精品一区二区三区 | 欧美白丰满老太aaa片 | 亚洲日韩精品一区二区三区 | 9l视频自拍九色9l视频最新 | 肉大榛一进一出免费视频 | 精品亚洲韩国一区二区三区 | 五月天亚洲视频 | 免费的黄色影片 | 日本精品不卡 | 成人h视频在线观看 | 尤物永久网站 | 成人狠狠色综合 | 国产精品成人嫩草影院 | 国产精品久久久久久久久久久久午衣片 | 亚洲午夜久久久精品影院 | 蜜臀av国内精品久久久夜夜蜜臀 | 亚洲国产精品热久久 | 18禁亚洲深夜福利入口 | 午夜激情在线视频 | 天天躁夜夜躁狠狠躁 | 国产人妖视频一区二区, | 青青青在线视频 | 国产香蕉精品视频 | 精品日韩欧美一区二区三区 | 在线看片人成视频免费无遮挡 | 国产色在线 | 国产 无码一区二区三区爆白浆 久草免费手机视频 | 日韩啪啪网站 | 午夜男人的天堂 | 久久久久国色αv免费观看 久久精品一区二区三区四区毛片 | 三级成人在线 | av中文字幕一区二区 | 国产日韩欧美亚洲 | 一本色道久久88 | 少妇被粗大的猛烈进出va视频 | 色妞www精品免费视频 | 国产精品青青青在线观看 | 2019午夜三级网站理论 | 欧美黄色免费在线观看 | 欧美性影院 | 精品国产一区二区三区在线 | 无码熟熟妇丰满人妻porn | 久久这里只有是精品23 | 一边吃奶一边添p好爽高清视频 | 欧美天堂久久 | 内射人妻少妇无码一本一道 | 最新av在线播放 | 欧美村妇另类ⅹxxx性 | 91夜夜| 好爽插到我子宫了高清在线 | 91国内揄拍国内精品对白 | 欧美黑人与白人精品a片 | 97人妻天天爽夜夜爽二区 | av视| 超碰免费在| 精品服丝袜无码视频一区 | 国产成人av网站 | 精品人妻午夜一区二区三区四区 | 多毛丰满日本熟妇 | 国产欧美丝袜在线二区 | 99在线精品免费视频 | 人禽伦免费交视频播放 | 国产日韩欧美一区二区久久精品 | 天天插插插 | www.羞羞视频 | 天堂中文资源在线观看 | 国产果冻豆传媒麻婆 | 久久高清免费视频 | 亚洲国产视频一区二区 | 国产人成精品一区二区三 | 国产九九九九九九九a片 | 一级特黄aaa毛片在线视频 | 草草在线播放 | 色呦呦网站在线观看 | 久久精品国产精油按摩 | 日本黄色不卡视频 | 美女一区二区视频 | 亚洲 自拍 色综合图 12p | 日韩精品www | 日本69精品久久久久999小说 | 五月婷婷天 | 午夜香蕉 | 绿帽在线| 国产乱肥老妇女精品视频网站 | 国产又色又刺激高潮视频 | 亚洲成人手机在线 | 黄色免费在线观看网站 | 欧美人与动牲交zooz3d | 欧美精品在线免费 | 免费无码又爽又刺激网站 | 久久精品日韩 | 337p日本欧洲亚洲大胆在线 | 欧美丰满少妇xxxxx高潮对白 | 视频区 国产 图片区 小说区 | 国产视频欧美视频 | 91精品国产综合久久福利 | 最新精品视频2019在线视频 | 欧美极品少妇xxx | 国产对白叫床清晰在线播放 | 久久久视频免费观看 | 国内精品乱码卡一卡2卡麻豆 | 人人妻人人澡人人爽欧美一区九九 | 亚洲偷色 | 国产a国产国产片 | 成人做爰69片免费看网站 | 日本视频黄 | 尤物av无码国产在线看 | 一本色道久久综合亚洲精品浪潮 | 亚洲黄色录像片 | 亚洲成a人v在线蜜臀 | 欧美性猛交ⅹxx | 久久国产精品免费专区 | 极品美女高潮呻吟国产剧情 | 免费av一级| 婷婷综合久久中文字幕 | 国产主播一区二区三区在线观看 | 精品卡一卡二卡3卡高清乱码 | av免费看片| 狠狠色噜噜狠狠狠狠2021天天 | 一区二区三区乱码在线 | 中文 | 国产在线观看www | 日韩激情在线播放 | 在线观看免费黄网站 | 狠狠躁狠狠躁东京热无码专区 | 99有精品 | 亚洲天堂va | 正在播放亚洲 | 亚洲欧洲巨乳清纯 | 久久国产精品99久久久久久进口 | 午夜精品久久18免费观看 | 人人揉人人捏人人添 | 日本精品一区二区三区四区 | 好想被狂躁无码视频在线观看 | 亚洲欧美精品suv | 九九免费在线视频 | 男人天堂最新网址 | 最新精品香蕉在线 | 中文字幕av久久 | www.亚洲精品| 成人看的羞羞视频免费观看 | 一级黄色片在线免费观看 | 91天天| 欧美一区网站 | 人人妻人人做人人爽夜欢视频 | 欧美日韩另类小说 | 韩国美女主播娇喘乳奶摇 | av色偷偷 | 老子影院午夜精品无码 | 日韩二区视频 | 亚洲国产成人欧美在线观看 | 玖玖综合九九在线看 | 好吊妞视频这里有精品 | 中文字幕第十二页 | www.9999av| 91成人品 | 国产开嫩苞实拍在线播放视频 | 91在线免费看 | 一本大道加勒比免费视频 | 无码人妻丰满熟妇区bbbbxxxx | 亚洲午夜精品a片久久www慈禧 | 精品国产一区二区三区四区vr | 国产欧美一区二区三区网站 | 天天躁夜夜躁天干天干2020 | av 一区二区三区 | 欧美在线播放 | 麻豆精品一区二区综合av | 老女人性淫交视频 | 欧美乱做爰xxxⅹ久久久 | 国产伦理五月av一区二区 | 成人网站国产在线视频内射视频 | 熟女乱中文字幕熟女熟妇 | 人妻中文乱码在线网站 | 日韩精品视频免费在线观看 | 成人在线激情视频 | 午夜免费国产体验区免费的 | 成人在线三级 | 波多野结衣免费一区视频 | 国产品无码一区二区三区在线 | 久久久久久久久久久免费精品 | 麻豆国产成人av高清在线 | 国产喷水吹潮视频www | 亚洲日韩av无码美腿丝袜 | 97在线中文字幕 | 欧美午夜一区二区三区精美视频 | 日本少妇喷水 | 三级网站在线播放 | 久久精品这里热有精品 | 97碰碰碰人妻视频无码 | 少妇性l交大片久久免费 | 成人3d动漫一区二区三区 | 少妇厨房愉情理9伦片视频 日韩av无码一区二区三区 | 欧美经典一区二区三区 | 日韩乱论 | 午夜成人福利片无码 | 风流少妇按摩来高潮 | 男女啪啪十八 | 色琪琪综合男人的天堂aⅴ视频 | 亚洲精品久久久久成人2007 | 日韩欧美卡一卡二卡新区 | 亚洲精品成人福利网站app | 视频一区国产 | jizz欧美大片 | 国产成人亚洲综合a∨猫咪 色吧五月婷婷 | 中文乱码字幕高清一区二区 | 日韩精品一区二区三区中文在线 | 韩国av一区二区 | 婷婷丁香六月激情综合在线人 | 国产成人艳妇aa视频在线 | 亚洲aⅴ一区二区三区 | 激情五月综合色婷婷一区二区 | 久久无码精品一一区二区三区 | 午夜亚洲国产理论片二级港台二级 | 电影久久久久久 | 亚洲不卡中文字幕 | 91国内精品视频 | 日韩成人高清视频在线观看 | 人人综合亚洲无线码另类 | 人妻人人做人碰人人添青青 | 人妻aⅴ无码一区二区三区 日韩av免费播放 | 久草精品视频 | 在线免费观看黄色小视频 | 国产精品久久无码不卡黑寡妇 | 亚洲欧洲日本无在线码 | 日本 在线| 国产精品久久久久久亚瑟影院 | 亚洲一区二区在线免费观看 | 五月天色综合 | 免费国产白丝喷水娇喘视频 | 伊人79| 久久久久久人妻无码 | 日本一区二区三区免费高清 | 国产无遮挡又黄又爽高潮 | 精品四虎国产在免费观看 | 国产激情久久久久久熟女老人 | 9re热国产这里只有精品 | 黄色男女 黄色a几 | 一级黄色片中国 | 无码人妻一区二区三区精品视频 | 欧美理论片在线 | 日韩av网站在线播放 | 里番本子纯肉侵犯肉全彩无码 | 伊人网网站 | 亚洲成无码电影在线观看 | 国产真实野战在线视频 | 国产欧美一区二区精品性 | 1000部国产精品成人观看 | 国产情侣av在线 | 亚洲国产综合精品 在线 一区 | 激情无码人妻又粗又大 | 97久久久人妻一区精品 | 激情综合小说 | 99国内精品 | 日韩一二三四 | 成年美女黄网站色大免费视频 | 免费国产乱理伦片在线观看 | 欧美激情亚洲综合 | 在线观看成人小视频 | 夜夜夜夜夜猛噜噜噜噜噜gg | 免费日韩视频 | 国产成人综合自拍 | 人狥杂交一区欧美二区 | 91探花福利精品国产自产在线 | 亚洲成人久久精品 | 性视频久久 | 国产一区免费在线 | av明星换脸无码精品区 | 国产精品久久久天天影视香蕉 | 欧美午夜精品一区二区三区 | 伊人3 | 精品一区二区三区波多野结衣 | 草草浮力地址线路①屁屁影院 | 91丨porny丨在线 | 国内精品久久久久久久coent | 亚洲美女视频高清在线看 | 国产欧美va欧美va香蕉在线 | 久久精品桃花av综合天堂 | 91精品国产乱码麻豆白嫩 | 六月婷婷久久 | 无码区日韩特区永久免费系列 | 免费观看又色又爽又黄的韩国 | 亚洲欧美日韩激情 | 小12萝裸体视频国产 | 亚洲综合av一区二区三区 | 亚洲一本二卡三卡四卡乱码 | 91丨国产丨精品白丝 | 免费一级黄色片 | 午夜精品喷水 | 熟女无套高潮内谢吼叫免费 | 又粗又硬又大又爽免费视频播放 | 婷婷色五月开心五月 | 久久国内精品自在自线400部 | 欧美成人午夜在线视频 | 三区免费视频 | 国产综合在线视频 | 欧美激情精品久久久久久变态 | 欧洲免费无码视频在线 | 又色又爽又黄又无遮挡的网站 | 亚洲最大av无码网站 | 日本中文字幕乱码aa高清电影 | 亚洲国产日韩a在线乱码 | 大肉大捧一进一出好爽app | 色噜噜久久综合伊人一本 | 一级大片免费观看 | 日韩精品无码免费毛片 | av在线成人 | 久久午夜私人影院 | 无码骚夜夜精品 | av丁香| 欧美村妇另类ⅹxxx性 | 欧美日韩后 | 国产成人欧美综合在线影院 | 草草影院精品一区二区三区 | 日韩在线无 | 国产一区二区精品免费 | 国产人妖视频一区二区 | 青青av| 国产又粗又黄又爽 | 欧美熟老妇乱 | 亚洲天堂日韩在线 | 又爽又黄又无遮挡的激情视频免费 | 91午夜精品一区二区三区 | 欧洲成人在线观看 | 打屁股日本xxxxx变态 | 亚洲成av 人片在线观看无码 | 久久久精品成人免费观看 | 国产日产亚洲精品 | 中文日产幕无线码6区收藏 茄子成人看a∨片免费软件 | 成 人 黄 色 视频免费播放 | 日韩每日更新 | 九色视频网址 | 国产在线98福利播放视频 | 日本真人无遮挡啪啪免费 | 丰满人妻一区二区三区视频53 | 欧美一卡二卡三卡四卡视频区 | 亚洲欧美日韩久久 | 中文字幕日韩精品成人免费区二区 | 在线看无码的免费网站 | 日韩中文亚洲欧美视频二 | 日本无遮羞打屁股网站视频 | 视频在线观看一区二区 | 伊人久久大香线蕉av专区性呦 | 久青草国产97香蕉在线影院 | 日韩a片无码一区二区五区电影 | 婷婷色爱区综合五月激情 | 亚洲看 | 九九免费观看视频 | 国产欧美一区二区三区在线看蜜臀 | 亚洲天堂网视频 | 国产91玉足脚交在线播放 | 久久亚洲国产精品尤物 | 人妻忍着娇喘被中进中出视频 | 国产一在线精品一区在线观看 | 中文在线а√在线 | 国产第五页 | 麻豆熟妇人妻xxxxxx | 国产真实交换配乱婬95视频 | 韩国精品无码少妇在线观看 | 亚洲综合av在线在线播放 | 中出日韩 | 一级片黄色一级片 | 亚洲自拍第二页 | 欧美亚洲国产成人 | 99久久精品国产免费看不卡 | 国产精品18久久久久白浆 | 亚洲精品专区 | 极品老师腿张开粉嫩小泬 | 国语对白永久免费 | 综合久久av| 高清不卡一区二区三区 | 亚洲精品久久久久久国 | 天天爱天天做天天av | 日韩色图在线观看 | 狠狠操欧美 | 亚洲成a人片在线观看天堂无码 | 五月婷婷久久久 | 一本久久a久久免费精品不卡 | 国产美女免费无遮挡 | 一本久道久久 | 丰满无码人妻熟妇无码区 | 日本又黄又猛又爽免费视频 | 国产成人av亚洲一区二区 | 无码国产精品一区二区免费式芒果 | 日本一区二区三区免费播放视频站 | 国产美女无遮挡免费软件 | 欧美一区二区三区黄色 | 亚洲另类自拍 | 日韩精品视频在线观看一区二区三区 | 亚洲欧美日韩视频一区 | 自拍偷拍五月天 | 少妇资源站| 国产美女永久无遮挡 | 欧美天天综合色影久久精品 | 99re6热在线精品视频播放 | 天天天天天天操 | 日本系列欧美系列 | 精品无码老熟妇magnet | 四虎影视在线免费观看 | 加勒比黑人和翔田千里在线 | 精品视频久久久久久久 | 亚洲系列一区中文字幕 | 无码高潮少妇多水多毛 | 狠狠综合久久久久综合网址 | 精品亚洲a∨无码一区二区三区 | 91超碰在线播放 | 校园春色综合网 | 久久精品亚洲综合专区 | 国产精品成人无码a片在线看 | 国产超碰人人做人人爽av | aaaa一级片| 欧美成人精品一区二区 | 欧美自拍亚洲综合在线 | 欧美精品播放 | 在线a免费 | a一级黄色片 | 成本人妻片无码中文字幕免费 | 亚洲精品图片区小说区 | 日韩av大全| 免费无码成人av在线播放不卡 | 无码一区二区三区久久精品 | 久久r精品国产99久久6不卡 | 中文字幕人妻被公上司喝醉506 | 污污小说在线观看 | 日韩av综合在线 | 天堂中文视频在线 | 精品国产自在精品国产浪潮 | 久久久全国免费视频 | 国产成人av自拍 | 性视频网址 | 天堂男人av | 国产精品久线在线观看 | 日本美女aⅴ免费视频 | 国产亚洲精品一区在线播放 | 精品久久久爽爽久久久av | 亚洲激情在线观看视频 | 欧美一区二区三区国产 | 在线免费观看黄网 | 久久婷婷五月国产色综合 | 精品视频网 | 91亚洲精品久久久蜜桃借种 | 久久精品国产99久久久香蕉 | 好大好深好猛好爽视频免费 | 看全黄大色黄大片美女人 | 亚洲第一在线播放 | 超碰97人人做人人爱综合 | 一区一区三区四区产品动漫 | 加勒比av在线播放 | 69视频污 | 噜噜噜久久,亚洲精品国产品 | 天堂成人 | 寡妇被老头舔到高潮的视频 | 久久99激情 | 一区二区不卡免费视频 | 亚洲中文字幕日产乱码高清 | 久久婷婷人人澡人人爽人人喊 | 日韩超碰人人爽人人做人人添 | 青青草原综合久久大伊人精品 | 亚洲精品久久区二区三区蜜桃臀 | 成年女人片免费视频播放a 亚洲图区综合网 | 色福利视频 | 日韩av无码久久一区二区 | 人人妻人人澡人人爽人人精品浪潮 | 国产18av | 无码国产精品一区二区免费久久 | 无码a∨高潮抽搐流白浆 | 国产精品资源一区二区 | 宅男噜噜噜66网站高清 | 国产偷国产偷亚洲清高 | 首页 国产 亚洲 丝袜图片区 | 亚洲国产成人自拍 | 性做爰高清视频在线观看视频 | 久久婷婷五月综合色首页 | 真实乱子伦露脸自拍 | 国产99页 | 国产高清狼人香蕉在线 | 无码国产一区二区三区四区 | 午夜天堂精品久久久久 | 精品无人乱码高清在线观看 | 亚洲另类自拍丝袜第五页 | 精品久久久久中文字幕日本 | 99久久免费看精品国产一区 | 拔擦8x成人一区二区三区 | 无码av免费一区二区三区a片 | 日韩午夜在线播放 | 无码一区二区波多野结衣播放搜索 | av手机在线播放 | 久久99国产精品久久99小说 | 少妇无套高潮一二三区 | 亚洲乱码一区av黑人高潮 | 最新色网址| 玩弄少妇肉体到高潮动态图 | 日韩啪啪片 | 日本在线播放一区二区 | 美女啪啪网站 | 尤物九九久久国产精品的特点 | 久久国产精品久久精 | 国产情侣作爱视频免费观看 | 国产欧美一区二区精品秋霞影院 | 福利短视频 | 国产强伦姧在线观看无码 | 亚洲日韩精品无码专区网站 | 91国产在线看| jav成人免费视频 | 在线看你懂得 | 99久久精品视香蕉蕉 | 欧美成人免费视频一区二区 | 国产激情视频在线 | 欧美日韩精品区 | 久久99精品久久久久久秒播蜜臀 | 久久九九av免费精品 | 337p日本大胆欧美裸体艺术 | 国产免费a∨片同性同志 | 午夜精品福利在线观看 | 激情图片在线观看 | 无遮挡啪啪摇乳动态图 | 免费播放毛片精品视频 | 亚洲小说少妇区图片 | 少妇无码吹潮 | 极品国产主播粉嫩在线 | 福利网址在线观看 | 成人深夜视频在线观看 | 免费在线国产 | 亚洲一区二区影院 | 亚洲欧美日韩成人综合网 | 国产精品成人无码久久久 | 中文无码成人免费视频在线观看 | 人妻无码αv中文字幕久久琪琪布 | 国产强奷在线播放 | 与子敌伦刺激对白播放的优点 | 国内免费精品视频 | 久久国产精品久久 | 欧美日韩色网 | 亚洲国产成人久久综合 | 精品99日产一卡2卡三卡4 | www.91成人| 欧美老熟妇乱子伦牲交视频 | 中文字幕在线亚洲精品 | 五月天久久久噜噜噜久久 | 青青草超碰在线 | 国产最爽的乱淫视频国语对白 | 好看的av网站 | 成年免费a级毛片 | 美女的尿囗网站免费 | 国产亚洲精品久久午夜玫瑰园 | 日本少妇丰满做爰图片 | 午夜性刺激免费看视频 | 亚洲一区二区影视 | 午夜av导航 | 日日碰狠狠添天天爽无码 | 国产精品尤物视频 | 亚洲精品无码一二区a片 | 国产美女被遭高潮免费网站 | 大香伊人 | 久久香蕉国产线看观看亚洲小说 | 国产精品国产三级国产有见不卡 | 欧美一区二区视频三区 | 欧日韩无套内射变态 | 少妇下面好紧好多水真爽播放 | 99九九99九九视频精品 | 深夜福利在线观看视频 | 亚洲 综合 校园 欧美 制服 | 人妻系列无码专区免费视频 | 亚洲综合影视 | 在线视频 亚洲 | 欧洲美女与动zooz | 最新国产の精品合集bt伙计 | 亚洲视频日韩视欧美视频 | 国产美女久久久亚洲综合 | 久久精品一区二区 | 97人人模人人爽人人喊38tv | 精品亚洲成在人线av无码 | 无码中文字幕日韩专区 | 欧美xxxxx少妇 | 少妇粉嫩小泬喷水视频 | 一本色道婷婷久久欧美 | 欧亚乱熟女一区二区在线 | 2022一本久道久久综合狂躁 | 91免费在线视频观看 | 欧美超大胆裸体xx视频 | 国产真实伦实例对白 | 国产综合久久久 | 3d成人h动漫网站入口 | 国模蔻蔻私拍极品150p | 丰满的少妇愉情hd高清果冻传媒 | 99久久久久久久久久久 | 国产精品jizz在线观看网站 | av黄网| 免费观看黄色av | 思思久久精品视频 | 丰满肥臀大屁股熟妇激情视频 | 国产在线视频国产永久 | 无码精品人妻一区二区三区免费看 | 国产人妖在线 | 91免费看视频 | 不卡av片 | 97高清国语自产拍 | 三区四区在线 | 久久国产乱子伦精品免费女人 | 中文字幕视频在线观看10页 | www.com久久 | 久久精品亚洲一区二区三区画质 | 午夜福利视频1692 | 夜夜骑首页 | 91网站在线看 | 美女又色又爽视频免费 | 黄色短视频在线播放 | 在线黑人抽搐潮喷 | 色一情一交一乱一区二区三区 | 成人精品自拍 | 亚洲日韩精品无码一区二区三区 | 黄色在线不卡 | 国产午夜亚洲精品羞羞网站 | 久久青青草原一区二区 | 日本理论片在线播放 | 一本一本久久a久久精品综合 | 亚洲国产精品一区二区成人片 | 国产精品国产三级国产普通话99 | 久久一区二区三区视频 | 日本高清一区免费中文视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 人妻熟妇乱又伦精品无码专区 | 国产免费无遮挡吸乳视频 | 久久色播 | 色一区二区三区 | 蜜桃av影院 | 无码人妻丰满熟妇区免费 | 国产精品va无码一区二区 | 国产综合精品女在线观看 | jizzjizz中国少妇中文 | 蜜桃av亚洲精品一区二区 | 伊人久久久精品区aaa片 | 日本一卡2卡3卡4卡免费精品 | 国产午夜精品免费一区二区三区视频 | 在线观看特色大片免费网站 | 一区二区三区在线 | 网站 | 韩国三级情欲乳 | 亚洲va欧美 | 激情综 | 日韩av网站在线播放 | 亚洲一区二区三区自拍天堂 | 久久久丁香 | 久久久人成影片一区二区三区 | 亚洲国产成人久久综合三区 | 人伦片无码中文字 | 久久久久久a亚洲欧洲av冫 | 美女黄的视频全免费 | 人人91| 久久综合伊人77777麻豆最新章节 | 久久99网| 欧美黄色a | 国产精品自在在线午夜精华在线 | 91精品久久久久久久91蜜桃 | 久久这里只有精品青草 | 中文字幕在线免费视频 | 欧美狂野乱码一二三四区 | 国产aⅴ人妻互换一区二区 亚洲网视频 | 国产精品夜夜夜一区二区三区尤 | 午夜精品久久久久久99热小说 | 亚洲二区在线 | 精品久久久久av免费观看 | 手机在线亚洲 | 国产精品igao视频网入口 | 国产成人啪精品午夜网站 | 在线视频99| 女同性av片在线观看免费网站 | 国产偷国产偷亚洲高清人白洁 | 国产精品欧美久久久久无广告 | 欧美日a | 久久香蕉国产线看观看怡红院妓院 | 国产色在线视频 | 亚洲日韩av无码一区二区三区 | 岛国精品一区二区三区 | 激情午夜婷婷 | 又黄又爽又色的视频 | 亚洲中午字幕 | 精品少妇v888av | 午夜亚洲天堂 | 亚洲欧美日韩国产一区二区 | 成人免费视频久久 | 亚洲欧美成人久久综合中文网 | 亚洲色无码综合图区手机 | 色视频免费 | 综合久久给合久久狠狠狠97色 | 久久人妻精品国产一区二区 | 在线看福利影 | 夜夜操天天艹 | 成人无码av网站在线观看 | 又黄又色又爽 | 日韩福利| 曰本无码人妻丰满熟妇5g影院 | 亚洲国产成人久久一区www | 国产在线操| 爱色av.com| 性xxxxxxxxx18欧美 | 92国产精品午夜福利无毒不卡 | 亚洲国产精品福利片在线观看 | 无遮挡裸体免费视频尤物 | 在线播放精品视频 | 国产无遮挡吃胸膜奶免费看 | 国产黑色丝袜视频在线观看网红 | 国产猛男猛女超爽免费视频网站 | 在线cao| 又色又污又爽又黄的网站 | 国产成人亚洲综合色婷婷秒播 | 亚洲精品少妇30p | 日本丰满美少妇 | 久久精彩免费视频 | 国产女人高潮嗷嗷嗷叫 | 伊人久久大香线蕉综合影视 | 精品久久久久久亚洲综合网站 | 亚洲一区二区福利视频 | 亚洲成人在线视频观看 | 精品国产不卡一区二区三区 | 7777亚洲大胆裸体艺术全集 | 欧美亚洲精品天堂 | 大陆极品少妇内射aaaaa | 蜜臀99久久精品久久久久小说 | 精品无码成人网站久久久久久 | 久久亚洲精品无码观看不卡 | 国产成人精品亚洲午夜 | 天天搞天天搞 | 国产成人无码性教育视频 | 二区三区精品 | 日韩系列 | 好吊妞人成视频在线观看强行 | 久久综合给合久久狠狠狠97色 | 久久影院视频 | 欧美性猛交xxxx三人 | 日本少妇内射视频播放舔 | 中文字幕制服丝袜第57页 | 福利精品视频 | 亚洲精品国产精品久久99热 | 亚洲www啪成人一区二区 | 无码午夜人妻一区二区三区不卡视频 | 国产精品久久久久久久久久新婚 | 中文字幕激情小说 | 91亚洲欧美中文精品按摩 | 亚洲精品视频播放 | 午夜精品久久久久久久99樱花 | 天天做天天爱夜夜爽毛片l 打开每日更新在线观看 | 国产乱妇乱子在线播视频播放网站 | 精品午夜福利无人区乱码一区 | 亚洲一区二区三区欧美 | 婷婷五月色综合 | 久操久操 | 免费无码av片在线观看网站 | 国产夜色视频 | 欧美综合区自拍亚洲综合图 | 二男一女一级一片 | 亚洲不卡视频在线 | 2022一本久道久久综合狂躁 | 国产成人亚洲综合色影视 | 亚洲成人手机在线观看 | 成人性做爰片免费视频 | 性猛交娇小69hd | av丝袜美腿 | 91视频最新 | 尤物一区二区三区精品 | 手机看片日韩福利 | 久久蜜桃av一区精品变态类天堂 | 国产一区二区99 | 99热国产在线观看 | 国产香蕉av | 又黄又爽又色的免费网站 | 亚洲精品无码久久千人斩 | 手机在线一区二区 | 91香蕉视频 | 思思九九热 | 4438xx亚洲最大五色丁香软件 | 正在播放重口老熟女露脸 | 国产成人久久久 | 色激情综合| 欧美一区二区三区观看 | 很黄很色很污18禁免费 | 一级黄色片a | 国产高清色高清在线观看 | 国产午夜亚洲精品不卡下载 | 精品视频在线观看免费 | 欧美理论片在线观看 | 最新国产の精品合集bt伙计 | 丝袜高跟麻麻浓精受孕人妻 | 精品人妻大屁股白浆无码 | 久久久久久毛片免费播放 | 野花av | 97一区二区国产好的精华液 | 久久久国产精品网站 | 成人五区 | 2014av天堂无码一区 | 999国产精品 | 手机在线观看你懂的 | 无码国产精成人午夜视频 | 成人性色生活片免费看l | 国产午夜无码福利在线看网站 | 99国精品午夜福利视频不卡99 | 人人爽人人澡人人人妻、百度 | 神马福利视频 | 国产ae86亚洲福利入口 | 探花久久 | 人人妻人人做人人爽夜欢视频 | 欧美亚韩一区二区三区 | 日韩一区二区三区欧美 | 午夜高潮视频 | 中文字幕第22页 | 正在播放少妇呻吟对白 | 欧美精品一区二区三区免费播放 | 一区二区三区少妇 | 久久久精品一区二区三区四季av | 色婷婷亚洲六月婷婷中文字幕 | 国产suv一区二区 | 国产无遮挡又黄又爽免费网站 | 亚洲自拍另类 | 中文字幕欧美亚洲 | 精品中文字幕在线播放 | 欧美不卡网| 精品国产乱码久久久久久软件大全 | 午夜免费福利小视频 | 99热这里只有是精品2 | 久久久噜噜噜久久久白丝袜 | 国产98在线 | 免费 | 成人影片一区免费观看 | 吃奶摸下激烈床震视频试看 | 国产精品人妻一区二区三区四 | 青青在线久青草免费观看 | 69xnxxxxxx| 五月天综合视频 | 狠狠干网站| 少妇激情视频 | jzzjzz日本丰满成熟少妇 | 亚洲色图狠狠干 | 无遮高潮国产免费观看 | 一本一道av中文字幕无码 | 狼友av永久网站免费观看孕交 | 日本免费一区二区三区最新 | 啪啪伊人网 | 偷拍亚洲视频 | xxxx日本黄色 | 狠狠狠狼鲁亚洲综合网 | 欧美精品一区二区黄a片 | 久久精品中文字幕一区 | 被窝影院午夜无码国产 | 一本大道东京热无码一区 | 久久网站免费观看 | 国产一级免费视频 | 66国产精品 | 午夜精品一区二区三区免费视频 | 日本大尺度吃奶做爰久久久绯色 | 国产精选污视频在线观看 | 日韩人妻熟女毛片在线看 | 按摩师他揉我奶好爽捏我奶视频 | 欧美日韩视频一区二区 | 久久精品噜噜噜成人av | 日本中文乱码卡一卡二新区 | 日韩女优一区 | 新超碰在线 | 欧美激情国产一区 | 黄色免费影片 | 在线国产日韩 | 国产又粗又长又黄又猛 | 热の综合热の国产热の潮在线 | 色综合久久88 | 中文字幕日韩欧美 | 美女黄的视频全免费 | 国产偷国产偷亚洲清高孕妇 | 亚洲高清在线免费观看 | 无码av天堂一区二区三区 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 奇米影视777四色米奇影院 | 午夜免费毛片 | 中文字幕欧美日韩精品 | 日韩第一页在线观看 | 亚洲中文字幕日本无线码 | 国产精品禁忌a片特黄a片 | 30岁少妇又紧又嫩 | 三区在线视频 | 最新中文字幕av专区 | 51调教丨国产调教视频 | 中文字幕亚洲制服在线看 | 狠狠操天天干 | 在线观看欧美日韩视频 | 久久久久久a亚洲欧洲av | 日本三级免费观看 | 无码人妻一区二区三区av | 成人国产区| 亚洲熟妇av综合网 | 国产精品夜夜嗨视频免费视频 | 国产人妇三级视频在线观看 | 热re99久久精品国产99热 | 亚洲天堂第一页 | 欧美激情国内自拍 | 国产乱xxxxx987国语对白 | 夏目彩春娇喘呻吟高潮迭起 | 医院人妻闷声隔着帘子被中出 | 国产精品一区二区三区在线免费观看 | 人妻熟女一区二区aⅴ林晓雪 | 老司机在线精品视频网站的优点 | 国产视频第一区 | 国产精品久久久久久久9999 | 久久精品久久精品久久 | 国内永久福利在线视频图片 | 国产综合久久久久久 | 韩日午夜在线资源一区二区 | 不卡影院av| 亚洲高清中文字幕在线看不卡 | 国产成人精品视频ⅴa片软件竹菊 | 一区在线观看视频 | 最新日韩av在线 | 亚洲成人乱码 | 国产网站av | 欧洲女同互摸互添 | 在线 | 一区二区三区四区 | 污网址在线观看 | 亚洲国产成人久久综合碰 | 777人体大胆中国人体哦哦 | 77色午夜成人影院综合网 | 国产高清对白 | 精品国产一区二区三区四区阿崩 | 亚洲中文av一区二区三区 | 午夜福利理论片在线观看 | 中文字幕中文在线 | 亚洲综合色婷婷七月丁香 | 国产日产欧产精品推荐 | 日韩精品一区国产偷窥在线 | 亚洲女人av| 激情综合婷婷丁香五月蜜桃 | 亚洲国产熟妇无码一区二区69 | 色综合国产 | 亚欧洲精品在线视频 | 久久综合狠狠色综合伊人 | аⅴ资源新版在线天堂 | 国产成人精品aa毛片 | 中文字幕手机在线看片不卡 | 亚洲欧美国产国产综合一区 | 久久久久青草线蕉综合超碰 | 亚洲乱亚洲乱妇50p 日韩男人天堂 | 成人福利网站在线观看 | 亚洲中文字幕日本在线观看 | 婷婷丁香五月中文字幕 | 九九色| 色综合久久中文字幕有码 | 国产亚洲高初学生不卡观看 | 最新国产在线拍揄自揄视频 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲人成网站777色婷婷 | 无码乱码天天更新 | 国内自拍中文字幕 | 久久精品国产99精品亚洲 | 色视频一区二区三区 | 久久婷婷综合色丁香五月 | 尤物国产在线精品一区 | 欧美天堂久久 | 国产成人av在线免播放观看 | 粉嫩av一区二区三区粉 | 日韩av网站在线播放 | 日本欧美视频在线观看三区 | 欧美性videostv另类极品 | 中文字幕女同女同女同 | 免费看午夜福利在线观看 | a级av| 岛国av免费在线 | 欧美高清另类 | 777奇米四色成人影视色区 | 麻豆视传媒精品av | 亚洲v国产v欧美v久久久久久 | 成人在线观看黄色 | 国产粗话肉麻对白在线播放 | 色交视频| 欧美福利片在线观看 | 欧美日韩国产免费观看 | 成在人线av无码免费漫画 | 国产九九在线观看 | 亚洲熟妇成人精品一区 | 国产爆乳无码视频在线观看3 | 亚洲精品国偷拍自产在线观看 | 欧美日韩国产成人高清视频 | 无码高潮又爽又黄a片软件 国产富婆一级全黄大片 | 国产在线精品无码二区二区 | 肉色丝袜脚交一区二区三区 | 伦理精品一区二区三精品 | www亚洲精品久久久无码 | 国产chinese精品露脸 | 国产女人伦码一区二区三区不卡 | 黄色免费网站视频 | 国产成人无码18禁午夜福利网址 | 超薄肉色丝袜一二三 | 日日弄天天弄美女bbbb | www99com | 特级毛片在线观看 | 日本精品一区二区三区在线观看 | 国产精品视频全国免费观看 | 午夜一区二区三区四区 | 欧美日韩乱国产 | 欧美日韩在线精品一区二区 | 日日网| 亚洲视频天天射 | 欧美一区国产一区 | 精品国产人成亚洲区 | 老司机精品无码免费视频 | 日本www网站色情乱码 | 强开少妇嫩苞又嫩又紧九色 | 久久久久国产精品一区二区 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久精品人妻无码一区二区三区v | 热99re6久精品国产首页 | 国自产拍偷拍精品啪啪一区二区 | 国产aⅴ爽av久久久久久 | 天堂中文资源在线观看 | 91成人福利在线 | 久久无码字幕中文久久无码 | 在线免费视频一区二区 | 午夜嘿嘿嘿在线观看 | 婷婷色婷婷开心五月四房播播 | 色av色播 | 特黄特色大片免费播放器图片 | 午夜草 | 欧美熟妇xxzoxxzo视频 | 国产99在线 | 欧美 | xxxx少妇高潮毛片新婚之夜 | 五月婷婷一区二区三区 | 天堂视频网 | 无码人妻日韩一区日韩二区 | 欧美精品h | 亚洲制服丝袜中文字幕在线 | 国内精品伊人久久久久av | 三区免费视频 | 久久中文字幕人妻熟av女 | 国产成人精品自在钱拍 | 欧日韩在线 | 亚洲精品黄 | 亚洲精品综合欧美一区二区 | 亚洲图片激情小说 | 网红主播 国产精品 开放90后 | 欧美日韩在线第一页免费观看 | 好大好猛好爽好深视频免费 | 国产精品一v二v在线观看 | 日本不卡一区在线观看 | 蜜臀av性色av| 97人人模人人爽人人少妇 | 免费毛片视频网站 | 日韩在线欧美在线 | 成人片黄网站色大片免费毛片 | 色拍自拍亚洲综合图区 | 一区二区三区免费在线观看 | 美女网站在线看 | 亚洲大成色www永久网站 | 熟妇高潮精品一区二区三区 | 久久久久高潮毛片免费全部播放 | 在线a亚洲v天堂网2018 | 亚洲区色欧美另类图片 | 天堂伊人网 | 99国产欧美精品久久久蜜芽 | 六月丁香中文字幕 | 亚洲人成久久 | 黄色福利视频网站 | 91视频8mav| 对白刺激国产对白精品城中村 | 视频二区国产 | 久久久久久免费 | 亚洲精品日韩精品 | 97视频在线精品国自产拍 | 伊人久在线 | 宅男噜噜噜66网站高清 | 正在播放大战肉丝少妇 | 怡春院久久国语视频免费 | 中文乱码免费一区二区三区 | 日韩精品 中文字幕 视频在线 | 懂色av蜜臀av粉嫩av | 久久精品国产亚洲七七 | 国产在线看片无码人精品 | 亚洲成年 | 国产乱人激情h在线观看 | 色香欲天天天影视综合网 | 日韩欧美成人一区 | 国产无套中出学生姝 | 日韩在线一区二区不卡视频 | 国产成人一区二区三区久久久 | 国产精品第9页 | 国产视频自拍一区 | 青椒国产97在线熟女 | 成人三级无码视频在线观看 | 18国产精品福利片久久婷 | 人人妻人人爽人人澡欧美一区 | 黄网站成人片免费视频 | 亲胸揉屁股膜下刺激视频免费网站 | 日日狠日 | 久久久久亚洲精品男人的天堂 | a国产一区二区免费入口 | 夜夜躁狠狠躁日日躁av | 亚洲国产精品无码久久九九大片 | 高潮呻吟国产在线播放 | 国 产 黄 色 大 片 | 特黄网站 | 日本熟人妻中文字幕在线 | 秋霞国产成人精品午夜视频app | 少妇久久久被弄到高潮 | 国产精品乱码一区二区视频 | 免费观看无遮挡www的视频 | 520av在线 | 国产日产欧产精品精品app | 青青草原av | 无码人妻一区二区三区免费看成人 | 精品综合久久久久久97 | 12萝自慰喷水亚洲网站 | 亚欧精品在线观看 | 青青草成人免费 | 玖玖久久 | 国精产品69永久中国有限 | 人妻无码中文专区久久av | 噼里啪啦在线看免费观看视频 | 无码精品人妻一区二区三区人妻斩 | 久久男人 | 国产精品久久久久久久久久红粉 | 久久久久久久久99精品大 | 日韩人妻高清精品专区 | 亚洲人成无码网站在线观看野花 | 一区二区三区黄色录像 | 超碰在线观看免费版 | 国产voyeur精品偷窥222 | www.久久久精品 | 最新不卡av | 精品无码午夜福利电影片 | 欧美一级视频免费看 | 国产乱子伦无套一区二区三区 | 国产无遮挡又爽又黄大胸免费 | 国产精品美女久久久另类人妖 | 国产精品1000夫妇激情啪 | 国产精品久久久久久亚洲影视内衣 | 深夜福利免费在线观看 | 国产自偷亚洲精品页65页 | 漂亮人妻被中出中文字幕 | 无码欧美黑人xxx一区二区三区 | 国产精品久久福利网站 | 免费看日产一区二区三区 | 永久免费无码网站在线观看 | 麻豆精品一区二区综合av | 少妇一级淫免费放 | 免费人成在线观看视频高潮 | 人妻少妇熟女javhd | 日本三级理论久久人妻电影 | 国产精品色午夜免费视频 | 国产欧美日韩一区 | 无码日韩精品国产av | 国产福利视频在线观看 | а√中文在线资源库 | 激情超碰在线 | 夜夜春亚洲嫩草一区二区 | 香港午夜三级a三级三点在线观看 | 性xxxxxxxxx18欧美| 色欧美在线视频 | 99re精彩视频 | 欧美草b内射在线aaaaaa | 国产成人午夜精品影院 | 免费国产成人高清在线观看网站 | 日韩人妻无码精品免费shipin | 久久久综合亚洲色一区二区三区 | 日本熟妇色高清免费视频 | 欧美性色黄大片手机版 | 激情婷婷在线 | 亚洲国产剧情在线观看 | 张筱雨裸体视频三级 | 国产一级一区二区 | 美女自卫慰黄网站免费 | 免费一级欧美片在线播放 | 李宗瑞91在线正在播放 | 亚洲爱视频 | 亚洲激情在线 | 好大好长好紧爽小91 | 欧美成人一级片 | 欧美 亚洲 另类 丝袜 自拍 动漫 | 亚洲欧美日韩在线观看一区二区三区 | 久久久久人妻精品区一 | 性色av网站 | 欧美成人综合视频 | a天堂在线资源 | 五月精品在线 | 国产亚洲精品拍拍拍拍拍 | 国产亚洲欧洲997久久综合 | 日日噜噜噜夜夜爽爽狠狠同性男 | 四虎免费大片aⅴ入口 | 欧美人与禽性性生活 | 久久久婷婷五月亚洲97色 | 精品产国自在拍 | 精品无码综合一区二区三区 | 国产亚洲精品久久久久久移动网络 | 婷婷激情综合网 | 午夜乱人伦精品视频在线 | 青青青国产在线观看手机免费 | 少妇大叫受不了了爽爽爽摸摸视频 | 99热爱久久99热爱九九热爱 | 无遮挡1000部拍拍拍免费 | 强伦姧人妻免费无码电影 | 中文日韩视频 | 免费的黄色影片 | 亚洲日韩片无码中文字幕 | 午夜自产精品一区二区三区 | 国产av亚洲精品久久久久久小说 | 日本高清免费视频 | 国产片在线天堂av | 国产尤物av | 精品国产乱码久久久久久果冻传媒 | 涩涩短视频网站 | 久久亚洲精品国产精品777777 | 无码写真精品永久福利在线 | 亚洲欧美精品在线 | 国产成人精品一区二区秒播 | 美日韩一区二区三区 | 久久婷婷综合缴情亚洲狠狠 | 国产成人亚洲综合青青 | 婷婷久久香蕉五月综合 | 少妇出轨精品中出一区二区 | 久久精品中文字幕无码绿巨人 | 精品久久久久久中文字幕202 | www.桃色| 综合啪啪 | 亚洲а∨精品天堂在线 | 久久久久久久久免费看无码 | 黄色一级国产 | 成人本色视频在线观看 | 亚洲精品国产美女在线一区 | 久久人人爽人人爽人人片亚洲 | 色婷婷综合久久久久中文字幕 | 亚洲精品aa片在线观看国产 | www99com| 风间由美交换夫中文字幕 | 隔壁人妻被水电工征服 | 国内精品免费网站牛牛 | 欧美人与动牲交欧美精品 | 欧美性色黄大片a级毛片视频 | 精品久久久久久无码人妻 | 中日韩精品视频在线观看 | 欧美丰腴丰满大屁股熟妇 | 青青草伊人网 | 色狠狠色狠狠综合 | 无码精品国产va在线观看dvd | 密臀av一区二区 | 国产午夜福利精品一区二区三区 | 国产精品老熟女露脸视频 | 精品国产18久久久久久二百 | 亚洲天堂999| 日韩www在线观看 | 九九影院理论片私人影院 | 嫩草研究院久久久精品 | 亚洲综合成人av一区在线观看 | 国产成人精品精品日本亚洲 | 91影院在线播放 | 精品网站999www| 国产综合亚洲精品一区二 | 日韩成人午夜 | 国产免费又色又爽又黄软件 | 亚洲美女午夜一区二区亚洲精品 | 青青青手机视频 | 欧美一区二区三区四区五区 | 天天插天天舔 | 欧美激情首页 | 欧美日韩免费做爰大片人 | 国产日韩欧美久久久精品图片 | av免费网站在线 | 国产一区二区在 | 五月婷婷基地 | 国产精品久久久久婷婷 | 久久97超碰人人澡人人爱 | www.久久国产| 成年女人看片永久免费视频 | ww久久综合久中文字幕 | 欧美又大又粗又湿a片 | 一级a性色生活片久久毛片明星 | 国产高清欧美 | 久久爱www免费人成av | 再深点灬舒服灬太大了av网站 | 中文在线无码高潮潮喷在线播放 | 日本精品视频免费观看 | 国产又粗又猛又黄又爽无遮挡 | 超碰在线超碰在线 | 久久九精品 | 欧美日韩在线播放视频 | 国产又粗又猛又硬又爽 | 久久九精品 | 亚洲人成电影在线天堂色 | 偷拍亚洲欧美 | 亚洲激情黄色 | 中文字幕 自拍偷拍 | 欧美黑人又大又粗xxxxx | 999久久久久久久久6666 | 精品久久久久久久久久久国产字幕 | 亚洲做受高潮欧美裸体 | 婷婷色婷婷深深爱播五月 | 欧美群妇大交乱免费视频 | 91精品久久久久久久久久久 | 色av一区二区 | 黄色av免费在线观看 | 久久伊人成人 | 中文字幕乱码一区二区三区四区 | 在线观看亚洲欧美 | 67pao国产成视频永久免费 | 亚洲日本香蕉视频 | 男人扒开女人内裤强吻桶进去 | 欧美老妇胖老太xxxxx | www.久久亚洲 | 4438ⅹ亚洲全国最大色丁香 | 九九九九久久久久 | 最近2019中文字幕大全第二页 | 免费又黄又裸乳的视频 | 男女后进式猛烈xx00动态图片 | 精品无码一区二区三区爱欲 | 一本久道久久综合狠狠老 | 最新中文字幕av无码专区不 | 欧洲美女黑人粗性暴交 | 亚洲无线一二三四区手机 | 91爱爱网 | 国产久在线 | 成人久久久久久久久久久 | 国产91丝袜在线播放动漫 | 噼里啪啦免费高清看 | 粗大猛地挺进娇喘啊在线视频 | 国产精品萌白酱永久在线观看 | 熟女乱牛牛视频在线观看 | 天天爱天天干天天操 | 色干网| 天堂在线免费观看 | 欧美性潮喷xxxxx免费视频看 | 青青草福利视频 | а√天堂中文在线资源库免费观看 | 国产亚洲第一午夜福利合集 | 99精品无人区乱码在线观看 | 成人热舞视频一区 | 狠狠色噜噜综合社区 | 天堂网在线观看免费视频 | 亚洲日韩国产一区二区三区在线 | 欧美日韩国产综合草草 | 免费无遮挡无码视频在线观看 | 久久久无码精品亚洲日韩蜜臀浪潮 | 中文字幕视频一区二区 | 亚洲小说区图片区另类春色 | 欧美性猛交xxxx免费看 | 91久久精品日日躁夜夜躁欧美 | 国产乱人伦偷精品视频免下载 | 日韩久久毛片 | 少妇私密会所按摩到高潮呻吟 | 好男人在线社区www在线播放 | 人妻丰满熟妇av无码区不卡 | 亚洲成在人网站无码天堂 | 农民人伦一区二区三区剧情简介 | 亚洲午夜久久久无码精品网红a片 | 免费观看性生交大片3区 | 亚洲欧美色图小说 | 久久久久久a亚洲欧洲av冫 | 色眯眯视频 | 99er6这里只有精品 | 欧洲熟妇色xxxx欧美老妇多毛网站 | 久久97久久97精品免视看 | 亚洲人成电影在线观看影院 | 日本精品久久久久久草草 | 欧美a图| 国产又粗又猛又色 | 欧美大片免费 | 大尺度做爰啪啪高潮 | 无码免费一区二区三区免费播放 | 青草综合一区二区三区 | 啪啪av大全导航福利网址 | 日韩国产欧美一区 | 超碰97人人做人人爱亚洲 | 国产愉拍精品手机 | 双腿高潮抽搐喷白浆视频 | 性史性农村dvd毛片 曰韩无码av片免费播放不卡 | 欧美自拍视频在线观看 | 爱久久av一区二区三区 | 爱情岛aqdlt国产论坛 | 日本va在线视频播放 | 中文在线8新资源库 | 欧美一级淫片免费视频魅影视频 | 超碰免费观看 | 国产精品私拍 | 日韩av女优在线播放 | 人人爽久久涩噜噜噜av | 女女女女bbbb日韩毛片 | 日韩去日本高清在线 | 女人天堂影院 | 久久99精品久久久久久琪琪 | 久久欧美一区二区三区性生奴 | 99久久久无码国产精品不卡 | 麻豆精品偷拍人妻在线网址 | 91网站在线免费观看 | 伊人激情 | 水蜜桃精品一二三 | 狠狠色噜噜狠狠狠狠999米奇 | 97影院理论片手机在线观看 | 99热国| 国产精品久aaaaa片 | 一级特黄aaaaaa大片 | 亚洲国产欧美在线人成app | 亚洲欧美激情国产综合久久久 | 亚洲成a人v欧美综合天堂 | 色翁荡熄又大又硬又粗又视频 | 亚洲高清色 | 91影音 | 成年在线观看视频 | 天堂av亚洲 | 欧美日韩久久久久 | 色天堂视频 | 性无码免费一区二区三区在线 | 熟妇乱子作爱视频大陆 | 黄色亚洲| 欧美96一区二区免费视频 | 337p日本欧洲亚洲大胆艺术图 | 日韩亚洲欧美一区二区 | 小雪奶水翁胀公吸的小说 | 久久狠狠高潮亚洲精品 | 成人一级在线 | 日韩超碰人人爽人人做人人添 | 一区二区小视频 | 中文字幕欧美亚州视频免费 | 日本天天射 | 午夜理论欧美理论片 | 国产精品久久久久久久久久辛辛 | 女人与牲口性恔配视频免费 | 日韩亚洲欧美中文高清在线 | 大学生疯狂高潮呻吟免费视频 | 在线黄色毛片 | 国产99视频精品免费视频6 | 91综合在线视频 | 91夜夜夜| 成人男同av在线观 | 亚洲色成人一区二区三区 | 无码h片在线观看网站 | 国产精品第七页 | 久久99国内精品自在现线 | 欧美 日产 国产精选 | 久久久久久亚洲精品不卡 | jizz色| 亚洲欧洲精品成人久久曰影片 | 91风间由美一区二区三区四区 | 91av在线免费视频 | 欧美熟妇丰满xxxxx裸体艺术 | 欧洲女同互慰互舔 | 亚洲va天堂va欧美片a在线 | 天天综合激情 | 9.1成人看片免费版 婷婷色一区 | 99久久人人爽亚洲精品美女 | 精品国产成人亚洲午夜福利 | 白嫩少妇xxxxx性hd美图 | 国产一级一级片 | 九九久久精品免费观看 | 大香伊蕉日本一区二区 | 噜噜噜久久久 | 爱爱资源网| 国产欧美激情日韩成人三区 | 人妻换人妻仑乱 | 人与人性恔配视频免费 | 日本一本免费一二区 | 国产午夜不卡片免费视频 | 亚洲欧美日韩国产自偷 | 日韩亚射吧 | 亚洲成a人片在线视频 | 久久亚洲堂色噜噜av入口网站 | 亚洲精品视频免费 | 熟女无套内射线观56 | 久热精品视频在线播放 | 四虎影院免费看 | 亚洲精品国产精品乱码不99按摩 | 1区2区3区4区产品不卡码网站 | 亚洲国产午夜精华无码福利 | 欧美激欧美啪啪片sm | 亚洲精品夜夜夜妓女网 | 无码人妻精品一区二 | 色一情一乱一伦麻豆 | 一边啪啪的一边呻吟声口述 | 97超碰国产精品无码 | 一 级 黄 色 片免费网站 | 欧美永久 | 337p粉嫩日本欧洲亚洲大胆 | 久久国产网站 | 一二三四在线观看免费视频 | 久久国产精品99精品国产987 | 中文字幕一二 | 久久精品香蕉绿巨人登场 | 姑娘第5集在线观看免费好剧 | 亚洲欧洲日产喷水无码 | 国内精品国产三级国产a久久 | 精品无码人妻一区二区三区不卡 | www.欧美色| www插插插无码视频网站 | 老熟女强人国产在线播放 | 亚洲最大av资源网在线观看 | 97伊人久久 | 午夜亚洲成人 | 国产人妖ts重口系列 | 影音先锋在线亚洲网站 | 国产真实强奷网站在线播放 | 国产不卡在线 | 中文字幕亚洲无线码一区女同 | 亚洲男人的天堂在线aⅴ视频 | 任你躁在线精品免费 | 欧美一区在线观看视频 | 日本女优爱爱视频 | 一本本月无码- | 91久久综合亚洲鲁鲁五月天 | 伊人日韩 | 99亚洲精品卡2卡三卡4卡2卡 | 老湿机69福利区无码 | 亚洲精品国产精品国自产在线 | 91精品国产综合久久久久久久久久 | av在线视屏 | 日日爽日日操 | 日产毛片| 极品少妇高潮到爽 | 九九av| 好男人网站| 久久亚洲精品成人av无码网站 | 色图插插插 | 欧美午夜一区二区三区精美视频 | 成人国内精品久久久久影院 | 国产在线拍揄自揄视频菠萝 | 超碰97久久国产精品牛牛 | 国内精品在线免费 | 亚洲欧美影视 | 青少年xxxxx性开放hg | 国产欧美自拍视频 | 国产日产精品一区二区三区四区的观看方式 | 又大又粗又爽免费视频a片 中文字幕 视频一区 | 国产麻豆剧传媒精品av | 亚洲黄色在线播放 | 精品国产一区二区三区久久 | 日日碰狠狠躁久久躁一区二区 | 农村女人乱淫免费视频麻豆 | 久久噜噜少妇网站 | 亚洲中文字幕无码一区无广告 | 蜜臀av午夜 | 都市激情 亚洲色图 | 99碰碰| 日韩一欧美内射在线观看 | 亚洲人成无码网www电影麻豆 | 天天做夜夜做 | 国产浮力第一页草草影院 | 长腿校花无力呻吟娇喘的视频 | 狠狠干很很操 | 欧美大片18禁aaa片免费 | 国色精品无码专区在线不卡 | 国产精品青青青在线观看 | 99er国产| 性啪啪chinese东北女人 | 国产99久60在线视频 | 传媒 | 忘忧草精品久久久久久久高清 | 精品国产午夜肉伦伦影院 | 伊人成人动漫 | 成年性午夜免费视频网站 | 中国少妇做爰全过程毛片 | 久久午夜伦鲁片免费无码 | 色婷婷综合久久中文字幕雪峰 | 午夜精品欧美 | 色综亚洲国产vv在线观看 | 一区二区在线免费观看视频 | 就去吻综合网 | 日韩精品亚洲人旧成在线 | 国产一区二区三级 | 无码人妻一区二区三区免费手机 | 久久久www成人免费毛片麻豆 | 天天操网址 | 在线看你懂 | 老司机精品导航 | 人妻丝袜无码专区视频网站 | 人妻换着玩又刺激又爽 | 欧美精品18videos性欧美 | 狠狠五月激情六月丁香 | 手机日韩av | 野花香社区在线视频观看播放 | 毛片成人| 亚洲欧美偷拍视频 | 久久久久久无码精品人妻a片软件 | 色欲av无码一区二区人妻 | 国产又色又爽又黄刺激视频 | 91色吧 | 国产精品国产高清国产av | 极品粉嫩国产18尤物在线观看 | 爱高潮www亚洲精品 亚洲欧美日韩中文无线码 天堂资源成人√ | 欧美巨大巨粗黑人性aaaaaa | 亚洲精品无码高潮喷水在线 | 国产午夜福利不卡在线观看 | 韩国性猛交╳xxx乱大交 | 中文字幕永久 | 精品日韩欧美一区二区在线播放 | 永久中文字幕免费视频网站 | 波多野结衣爱爱视频 | 日韩视频免费在线观看 | 免费视频亚洲 | 欧美国产日韩一区二区在线观看 | 成人免费播放视频777777 | 人人婷婷人人澡人人爽 | 久热精品视频在线观看 | 天堂在线免费观看 | 全免费又大粗又黄又爽少妇片 | 免费看48女人真人毛片 | 欧美日韩一区二区视频不卡 | 国产精品日韩 | 国产98涩在线 | 欧洲 | 偷看少妇自慰xxxx | 2020国产精品视频 | 色狠狠色婷婷丁香五月 | 激情综合婷婷丁香五月蜜桃 | 波多野无码中文字幕av专区 | 夜晚被公侵犯的人妻深田字幕 | 69国产成人综合久久精品欧美 | 精品久久久久久久国产性色av | 狠狠色综合久久婷婷 | 亚洲成av人在线观看网址 | 日韩福利在线视频 | 亚洲国产精品久久久久秋霞1 | 翔田千里88av中文字幕 | 国产日韩精品入口 | 色婷婷综合久久久中文一区二区 | xxxxxhd日本xxxx47 17c在线看 | 国产精品无码电影在线观看 | 中文字幕息子101在线 | 在线永久无码不卡av | 伊人成色综合网 | 日本高清中文字幕在线观线视频 | 国内精品91少妇在线播放 | 亚洲国产成人无码精品 | 九九99久久精品在免费线bt | 成人av一区二区兰花在线播放 | 国产成人a亚洲精v品无码 | 欧美色图俺去了 | 人人玩人人添人人澡免费 | 国产三级做爰在线观看 | 亚洲福利精品 | 草青青视频 | 国产又粗又猛视频免费 | chinese乱子伦xxxx国语对白 | 熟妇人妻系列aⅴ无码专区友真希 | 亚洲精品久久久久午夜aⅴ 色妞精品av一区二区三区 | 亚洲国产精品嫩草影院 | 一卡二卡3卡四卡网站精品 国产精品成人国产乱一区 日本a级免费 | 久久亚洲中文字幕无码 | 13小箩利洗澡无码视频网站免费 | 国产麻豆精品免费喷白浆视频 | 国产精品第7页 | 日韩免费一区二区三区高清 | 黄色片免费在线播放 | vvv.成人观看视频 | 在线你懂得 | 无码人妻一区二区三区免费看 | 一级黄视频 | 日韩欧美少妇 | 亚洲字幕av | 日本熟妇人妻ⅹxxxx国产 | 国产一区二区三区精品毛片 | 97青娱国产盛宴精品视频 | h肉动漫无修一区二区无遮av | 性饥渴艳妇性色生活片在线播放 | 国产伦精品一区二区三区照片91 | 国内熟妇人妻色在线视频 | 99超碰在线观看 | 欧美精品15p | 超碰干| 亚洲综合久久一区二区 | 男女一进一出超猛烈的视频 | 国产在线观看一区二区 | 粉嫩av一区二区夜夜嗨 | 国产精品综合在线 | 国产精品99久久久久久白浆小说 | 狠狠色噜噜狠狠狠狠色综合久av | 狠狠色婷婷狠狠狠亚洲综合 | 欧美 国产 小说 另类 | 亚洲成在人线av中文字幕喷水 | 日韩一区二区三区福利视频 | 午夜剧院免费观看 | 91视频小说 | 日韩精品国产另类专区 | 亚洲精品国产av成拍色拍婷婷 | 国产精品视频一区二区三区四 | av制服丝袜白丝国产网站 | 在线观看成人小视频 | 日韩精品在线观看网站 | 五月激情影院 | 亚洲综合一区二区三区 | 亚洲精品无码mv在线观看 | 欧美人成片免费看视频 | 国产怡春院无码一区二区 | 久久久久久三区 | 97涩国一产精品久久久久久久 | 国产99视频精品专区 | 国产精品久久久久久久久久不蜜月 | 婷婷国产一区 | 91精品一区二区三区久久久久 | 超碰av在线免费观看 | 国产精品国产自产拍高清av王其 | 国产成人福利视频 | 成人小视频免费观看 | 成人亚洲视频 | 久久久久久成人 | www.97av| 日本www视频| 亚洲熟妇丰满大屁股熟妇 | 性生交大片免费看女人按摩 | 亚洲高清网 | 青青草香蕉 | 久久99er6热线精品首页蜜臀 | 天天色小说 | 欧美v亚洲 | 欧美黄色大片免费观看 | 国产美女亚洲精品久久久99 | 一区二区三区四区在线 | 好硬好湿好爽好深视频 | 波多野结衣初尝黑人 | 国产三级在线播放 | 国产清纯在线一区二区 | www成人 | 午夜久久影院 | 怡红院av人人爰人人爽 | 亚洲偷自拍国综合色帝国 | 在线观看片a免费不卡观看 日韩性猛交ⅹxxx乱大交 | 激情偷乱人成视频在线观看 | 国产香蕉久久精品综合网 | 人摸人人人澡人人超碰手机版 | 国产仑乱 | 在线天堂www天堂资源在线 | 欧美日韩1234| 国产日产精品一区二区三区 | 在线视频福利 | 天天色天天射天天操 | 亚洲精品久久久久久中文传媒 | 9人人澡人人爽人人精品 | 日本熟日本熟妇在线视频 | 欧美日韩国产一区二区 | 中文字幕一区二区三区乱码图片 | 中文字幕第一页在线视频 | 精品久久久久久久无码人妻热 | 无遮挡高潮国产免费观看 | 内射毛片内射国产夫妻 | www.偷拍.com| 欧美日韩一区二区三区自拍 | 久久久久爽人综合网站 | 久久婷婷日日澡天天添 | 国产精品人成视频免费vod | 国产黄色大片在线观看 | 日本a久久| 福利视频免费观看 | 在线天堂www在线国语对白 | 99re66热这里只有精品8 | 日本公妇乱淫xxxⅹ wwwwww国产 | 欧美孕妇xxxx做受欧美88 | 日日天日日夜日日摸 | 欧美成人一卡二卡三卡四卡 | 欧洲国产精品无码专区影院 | 国产在线无码精品电影网 | 国产伦理精品一区二区三区观看体验 | 国产午夜精品一区二区三区漫画 | 人妻夜夜爽天天爽爽一区 | 亚洲欧美影视 | 精品少妇久久 | 国产美女又黄又爽又色视频免费 | 欧美在线一二三四区 | 日韩不卡在线观看 | 亚洲国产精品久久久久秋霞 | 国产在线超清日本一本 | 精品国产99久久久久久麻豆 | 国产精品一区久久久久 | 国产成人8x人网站视频在线观看 | 免费看黄色一级视频 | 成人91在线 | 国产成人精品区 | 国产精品美女久久久另类人妖 | 乱精品一区字幕二区 | 熟女俱乐部五十路六十路av | 文中字幕一区二区三区视频播放 | 日韩欧美亚洲综合久久影院ds | 人人舔人人干 | 色偷偷色噜噜狠狠网站久久 | 久久毛毛片 | 国产又粗又猛 | 无码h黄肉动漫在线观看网站 | 色偷偷色噜噜狠狠网站久久 | 欧美在线视频你懂的 | 鲁丝一区二区三区免费 | 亚洲精品福利一区二区三区蜜桃 | 成人午夜免费观看 | 天堂中文在线播放 | 男人手伸进内衣里揉我胸到爽 | 精品国产女主播在线观看 | 91啦视频| 精品国产情侣高潮露脸在线 | 99er国产 | 欧美v国产v亚洲v日韩九九 | 美脚の诱脚舐め脚责91 | 久青草无码视频在线播放 | 99精品色 | 狠狠色狠狠色综合日日小说 | 亚洲一区亚洲二区 | av天堂亚洲国产av | 艳妇臀荡乳欲伦69调教视频 | 97国产真实伦对白精彩视频8 | 日本天堂免费 | 日日拍拍 | 天天超碰 | 国产精品国产三级国产普通话 | 天天干天天操天天舔 | 日韩av在线网 | 国产黄色大片免费观看 | 欧美一级做性受免费大片免费 | 国产又粗又长又硬免费视频 | 日本少妇激三级做爰在线 | 大地资源中文第二页日本 | 吃奶呻吟打开双腿做受视频 | 97国产人妻人人爽人人澡 | 一曲二曲三曲在线观看中文字幕动漫 | 午夜一区二区国产好的精华液 | 26uuu国产精品视频 | 女女百合高h喷汁呻吟视频 色偷偷www.8888在线观看 | 手机在线观看日韩大片 | re久久| 上司人妻互换hd无码中文 | 中文字幕精品一区二区三区精品 | 丰满人妻熟妇乱又伦精品视频三 | 国产精品户露av在线户外直播 | 亚洲精品人人 | 国产a∨国片精品白丝美女视频 | 小仙女异导航av福利尤物 | 麻豆精品久久久久久久99蜜桃 | 免费无码又爽又刺激毛片 | 97成网| 欧洲丰满少妇a毛片 | 精品人伦一区二区三区蜜桃视频 | 999久久久欧美日韩黑人 | 日本三级吃奶头添泬 | 色久阁| 人人干网站 | 亚洲春色cameltoe一区 | 成人黄色在线播放 | 亚洲国产系列 | 四虎精品国产永久在线观看 | www.羞羞视频 | 好紧好爽好湿别拔出来视频男男 | 国产人妖cd在线看网站 | 国产成人无码牲交免费视频 | 国产欧美精品国产国产专区 | 亚洲精品无码成人av电影网 | 午夜成人片在线观看免费播放 | 亚洲欧洲日产国码无码av喷潮 | 欧美视频在线不卡 | 久草在线免 | 一级做a视频 | 日本免费三片在线观看 | 色悠久久久久久久综合网 | 我爱搞在线观看 | 黄色av免费在线观看 | 国产av一区二区三区人妻 | 欧美日韩国产传媒 | 亚洲视频二 | 亚洲另类色 | 欧美美女网站 | 亚洲综合久久成人a片 | 老少配老妇老熟女中文普通话 | 天天翘av| 永久免费无码网站在线观看 | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 天天久久综合网 | 亚洲综合区图片小说区 | 极品美女扒开粉嫩小泬 | 一个人免费观看的www视频 | 单亲与子性伦刺激对白播放的优点 | 忘忧草www中文在线资源 | 精品久久ai | 麻豆av传媒蜜桃天美传媒 | 久久99精品久久久久久秒播蜜臀 | 激情小说激情视频 | 18禁裸乳啪啪无遮裆网站 | 国产高清视频在线观看69 | 人妻少妇中文字幕久久 | 六月丁香亚洲综合在线视频 | 91视频福利 | 国产精品疯狂输出jk草莓视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 日本亚洲欧美在线 | 2022中文字幕 | 国产精品久久影院 | 成人免费视频高潮潮喷无码 | 久久黄色免费网站 | 国产精品爽爽v在线观看无码 | 字幕专区码中文欧美在线 | 99色 | 日韩爱爱网 | 日本精品久久久久中文字幕 | 变态性猛交xxxxxxhd | 亚洲国产成人精品无码区软件 | 亚洲国产日韩欧美 | 欧美网址在线观看 | 亚洲精品1 | 好色亚洲 | 亚洲一区波多野结衣在线 | 另类国产精品一区二区 | 免费看午夜福利专区 | 野狼av午夜福利在线 | 无码人妻一区二区三区在线 | 日日av拍夜夜添久久免费 | 亚洲五香丁香 | 日本久久中文字幕 | 欧美日韩国产精品爽爽 | 欧美精品黑人粗大 | 免费黄色成人网 | 国产成人一区二区三区在线观看 | 理论片福利片 | 中出 在线 | 激情久久婷婷 | 国产成人精品无码片区在线观看 | 日本激情视频一区二区三区 | 国产精品成人在线 | 国产成人愉拍免费视频 | 午夜日韩 | 字幕网91 | 人妻系列无码专区免费 | 一区二区三区免费视频播放器 | 综合激情四射 | 色爽 av | 精品少妇一区二区三区免费观 | 国产精品调教视频一区 | 欧美日韩国产码高清综合人成 | 亚洲精品热 | 欧美国产激情18 | 私人成片免费观看 | 亚洲日本乱码一区二区三区 | 美女啪啪无遮挡免费久久网站 | 欧美特黄特色三级视频在线观看 | av无码人妻波多野结衣 | 日韩国免费视频 | 国产va免费精品观看精品 | 人妻无二区码区三区免费 | 成人午夜精品久久久久久久蜜臀 | 久久精品视在现观看2 | 欧美亚洲精品一区二区在线观看 | 日本美女福利视频 | 亚洲国产精品一区二区成人片不卡 | 三上悠亚ssⅰn939无码播放 | 国产美女在线精品免费观看网址 | 国产成人av区一区二区三泡芙 | 欧美成人免费视频一区二区 | 黄色片在线免费看 | 欧美性色黄大片www喷水 | 开心激情播播网 | 欧美 中文字幕 | 樱空桃av在线 | 久久99av无色码人妻蜜柚 | 五月婷在线视频 | 日本黄色一级网站 | 密桃av | 日本激情网站 | 最新日韩中文字幕 | 欧美z0zo人禽交免费观看99 | 911久久香蕉国产线看观看 | 日日夜夜综合网 | 婷婷午夜天| 欧美成人猛交69 | 国产性精品 | www.久久久久久久久久 | 人妻熟女一区二区aⅴ千叶宁真 | 日韩欧美加勒比 | 亚洲成人免费在线观看 | 欧美视频在线免费播放 | 男女啪啪免费观看的网址 | 91pao对白在线播放 | 国产成人无码aa精品一区 | 欧美巨大黑人极品精男 | 天堂av无码大芭蕉伊人av不卡 | 日韩国产一区二区 | 久久高清 | 国产小屁孩cao大人 亚州av色图 | 国产精品久久久久aaaa | 成年人在线影院 | 国产精品成人免费视频网站京东 | 99在线视频免费观看 | 蜜桃视频成人在线观看 | 91av成人| 国产精品久久久网站 | 国产精品婷婷久久久久 | 日本精品视频在线观看 | 亚洲国产成人精品女人久久久 | 草色在线 | 日本另类αv欧美另类aⅴ | 亚洲一区日韩在线 | 亚洲精品啊啊啊 | 亚洲区综合| 日本一区不卡在线观看 | 中文字幕国产在线视频 | 国产精品久久久久精 | 99自拍视频 | 星空大象在线观看免费 | 狠狠综合久久综合88亚洲 | 性色va性a免费视频 2021精品高清卡1卡2卡3老狼 | 精品国产乱码久久久久久88av | 天堂999 | 久草综合在线视频 | 国产精品12p | 久久中文字幕无码a片不卡古代 | 4k岛国av超高清aⅴ | 国产精品免费无遮挡无码永久视频 | 日韩福利影院 | 最新欧美精品一区二区三区 | 久久欧美日韩精品一区二区 | 理论在线观看视频 | 国产精品人妻熟女毛片av久 | 91丨porny丨露出 | 亚洲夜夜性无码 | 麻豆久久久9性大片 | 日本 国产成 人 综合 亚洲 | 乱xxxxx普通话对白 | 一区二区三区免费观看 | 天堂av中文在线观看 | 狠狠躁天天躁无码中文字幕 | 在线免费观看亚洲视频 | 青青操原 | 欧美精品一区二区视频在线观看 | 国产黄色一级片 | 天天添| 天堂网8| 99re 视频| 亚洲精品无码高潮喷水a片软 | 国产精品野外av久久久 | 日日拍夜夜拍 | 欧洲精品欧美精品 | 黄色毛片视频免费 | 国产成人av三级在线观看 | 真人性生交免费视频 | 久久天天躁狠狠躁夜夜夜 | 国产aⅴ爽av久久久久电影渣男 | 国产丰满人妻一区二区 | 无码丰满熟妇bbbbxxx | 中文字幕在线第一页 | 狠狠躁夜夜躁人人爽天天古典 | 伊人久久大香线蕉综合色狠狠 | 亚洲人成人无码网www国产 | 国产夜夜嗨 | 91视频观看 | 两个黑人大战嫩白金发美女 | 国产精品无码av片在线观看播放 | 中文字字幕人妻中文 | 手机在线免费看毛片 | 亚洲成色综合网站在线 | 一区二区三区内射美女毛片 | 国产成人免费av一区二区午夜 | 久久国产午夜精品理论片推荐 | 亚洲国产精品久久亚洲精品 | 亚洲视频中文字幕在线观看 | 欧美午夜一区 | av色婷婷| 国产精品视频在线免费观看 | 亚洲中文字幕无码中文字 | 色噜噜狠狠色综合网 | 98色精品视频在线 | 国产高清狼人香蕉在线 | www.jizz国产| 欧美12--15处交性娇小 | 日日操天天射 | 三上悠亚精品二区 | 精品四虎国产在免费观看 | 国产精品久久久久久久久费观看 | 日韩欧美91| 久久国产一区二区三区 | 男人的天堂中文字幕 | 老头搡老女人毛片视频在线看 | 国产精品丝袜久久久久久消防器材 | 成人午夜视频网站 | 亚洲日韩在线中文字幕综合 | 欧美激情a∨在线视频播放 国产麻豆精品精东影业av网站 | 久草视频在线资源 | 男女私密视频 | 日韩人妻无码中文字幕一区 | 成人国产欧美日韩在线视频 | 久久精品天天中文字幕人妻 | 99riav.6国产情侣在线看 | 久久香蕉国产线看观看怡红院妓院 | 一出一进一爽一粗一大视频 | 青青青在线观看视频 | 亚洲午夜爱爱香蕉片 | 日韩欧美在线观看一区二区三区 | 在线观看国产黄色 | 伊人精品久久 | 69香蕉视频 | 尤物蜜芽国产成人精品区 | 91精品国产高清一区二区三密臀 | 精品99日产一卡2卡三卡4 | 美女露出奶头扒开尿口视频直播 | 日韩精品一区二区三区老鸭窝 | 欧美 日韩 中文 | sm调教视频在线观看 | 嫩草视频在线观看 | 亚洲色图40p | 成人性生交a做片 | 欧美第七页| 精品国际久久久久999波多野 | 欧美成人精品激情在线视频 | 久久破处 | 国产亚洲精品久久久久5区 49vv国产淫片aaaaaaa | av亚洲产国偷v产偷v自拍小说 | 少妇与子乱在线观看 | 欧美精品亚洲精品日韩专区va | 开心五月色婷婷综合开心网 | 国产美女明星三级做爰 | 性视频网| 成人久久网站 | 亚洲第一自拍 | 婷婷视频 | 国产裸体永久免费视频网站 | 亚洲一区 国产 | 制服丝袜人妻日韩在线 | 久久精品成人无码观看 | 亚洲视频在线观看网站 | 亚洲天堂免费看 | 999久久久免费精品国产 | 夜夜躁狠狠躁日日躁2021日韩 | 少妇人妻精品一区二区三区 | 男人的天堂免费 | 中文字幕日韩精品欧美一区蜜桃网 | 麻豆精品国产综合久久 | 日本少妇bbwbbw精品 | 国产大学生一级毛片绿象 | 国产精品国产三级国产aⅴ9色 | 亚洲国产成人久久精品app | 182tv福利视频 | 丰满人妻无奈张开双腿av | av狠狠干 | ww国产内射精品后入国产 | 婷婷色人阁 | 亚洲精品乱码久久久久久按摩观 | 女人国产香蕉久久精品 | 午夜精品久久久久久久99热浪潮 | 超碰2 | 亚洲 国产 韩国 欧美 在线 | 国产免费人成视频在线播放播 | 日韩免费在线视频观看 | av最新天 | 一級特黃色毛片免費看 | 亚洲成人黄色影院 | 国产又粗又猛又爽又 | 少妇大叫太大太爽受不了在线观看 | 91一区二区在线 | 在线播放你懂 | 日本一级淫片免费放 | 国产一区二区99 | 狠狠操夜夜爽 | 国产精品sm捆绑调教视频 | 国产精品疯狂输出jk草莓视频 | 综合久久伊人 | aaaa级黄色片 | 一二三四社区在线中文视频 | 蜜桃av无码免费看永久 | 久久人人97超碰国产亚洲人 | 18禁黄网站禁片免费观看女女 | 18禁无遮挡羞羞污污污污免费 | 日日操网站 | 国产婷婷综合在线视频中文 | 97超级碰碰碰视频在线观看 | 中文字幕亚洲精品无码 | 99久久亚洲精品视香蕉蕉v | 欧美大浪妇猛交饥渴大叫 | 国产成人夜色高潮福利app | 999精品嫩草久久久久久99 | 中文字幕精品三区 | 亚洲成a∨人片在线观看无码 | 久久久久无码中 | 久久久精品人妻久久影视 | 成人综合伊人五月婷久久 | 中文字幕丰满孑伦无码精品 | 男人天堂视频网 | 精品卡一卡二卡3卡高清乱码 | 午夜影视啪啪免费体验区 | 天堂网wwww | 日韩经典精品无码一区 | 欧美黑人性生活视频 | 人成免费在线视频 | 日本丰满的人妻hd高清在线 | 成人在线国产视频 | 亚洲第一页综合图片自拍 | 国产成人女人在线观看 | 成人又黄又爽又色的网站 | 中文字幕一区二区三区四区免费看 | aa在线| 91久久亚洲 | 欧美深度肠交惨叫 | 亚洲精品综合欧美二区变态 | 欧美网站免费观看在线 | 国产精品自在拍在线播放 | 国产成人一区二区三区app | 日本道在线观看 | 妇女性内射冈站hdwwwooo | 老司机午夜激情 | 亚洲男女 | 91激情视频在线观看 | 肉大榛一进一出免费视频 | 国产成人小说视频在线观看 | 欧美日韩在线视频 | 少妇一边呻吟一边说使劲视频 | 无码av中文出轨人妻 | 在线看毛片的网站 | 亚洲成av人片一区二区梦乃 | 亚洲在av极品无码 | 亚洲一区二区三区自拍天堂 | 巨茎爆乳无码性色福利 | 国产成人免费ā片在线观看老同学 | 99大香伊乱码一区二区 | 亚洲黄色毛片 | 国产曰批免费视频播放免费 | 窝窝午夜看片国产精品 | 一区二区在线免费观看 | 欧美天堂网站 | 亚洲无av码一区二区三区 | 老女人老熟女亚洲 | 成人无码视频在线观看大全 | 亚洲熟女精品中文字幕 | 一本色道久久综合一 | 国内精品久久久久久影院8f | 免费观看日韩钙片gv网站 | 中文字幕亚洲欧美日韩在线不卡 | 免费在线观看一区 | 狠色狠色狠狠色综合久久 | 少妇一级淫片免费看 | 亚洲国产精品久久久久久6q | 国产亚洲精品资源在线26u | 欧美老熟妇手机在线观看 | 成人免费毛片网 | av国产传媒精品免费 | 亚洲欧美一区二区三区在线观看 | 男生操男生的小说 | 国产 高潮 抽搐 正在播放 | 国产一区二区三区免费播放 | 性一交一乱一乱视频 | www.久久爽 | 午夜性色一区二区三区不卡视频 | 日本特黄特色aaa大片免费 | 欧美丰满少妇xxxx性 | 香蕉av一区二区三区 | 国产福利91精品 | 日皮视频在线观看 | 水蜜桃久久夜色精品一区怎么玩 | 91五月天 | 99久久精品九九亚洲精品 | 人妻忍着娇喘被中进中出视频 | 日日噜夜夜爽精品一区 | 欧州一级片 | 久久久久亚洲精品无码网址 | 久久亚洲a| 久草香蕉在线视频 | 天天色天天射天天干 | 国产精品理论片在线观看 | 在线看片无码永久免费视频 | 蜜臀98精品国产免费观看 | 影音先锋久久久久av综合网成人 | 自拍欧美日韩 | 日本阿v片在线播放免费 | 国产精品久久久久无码av色戒 | 亚洲va国产日韩欧美精品色婷婷 | 成人精品一区日本无码网 | av解说在线| 国产欧美va天堂在线观看视频 | 91极品在线| 日韩国产亚洲欧美成人图片 | 国产日韩欧美在线 | 亚洲熟女乱综合一区二区在线 | 91精品国产777在线观看 | 婷婷资源站 | 在线vr极品专区 | 男男啪啪激烈高潮cc漫画免费 | 高清国产一区二区三区四区五区 | 少妇扒开双腿自慰出白浆 | 激情六月丁香婷婷 | 免费国产午夜高清在线视频 | 伊人毛片| 午夜婷婷网 | 日日骚影院 | 九1热综合这里都是真品 | 在线va无码中文字幕 | 中文无码久久精品 | 亚洲精品久久久久久中文字幂 | 国产成人精品亚洲日本在线桃色 | 在线观看入口 | 天天躁夜夜躁天干天干200 | 欧美专区在线观看 | 亚洲性色av性色在线观看 | 男人天堂午夜 | 男生女生插插视频 | 91丨九色 | 成人α片免费视频在线观看 | 国产亚洲精品久久久久婷婷图片 | 欧美一级一级 | 国产精品日本亚洲欧美 | 国产欧美日韩一区二区搜索 | 二区免费视频 | 夜夜嗨一区 | 性旺盛的老女人 | 茄子香蕉视频 | 97人妻天天爽夜夜爽二区 | 青楼妓女禁脔道具调教sm | 亚欧美无遮挡hd高清在线视频 | 噼里啪啦高清在线观看 | 一本大道av日日躁夜夜躁 | a级毛片高清免费视频 | www.天天干.com| 国产精品久久久久久久久免费看 | 日本久久精品视频 | 视频一区视频二区制服丝袜 | 天天干天天操天天爽 | 中文字幕精品亚洲人成在线 | 岛国av一区二区三区 | 国产精品无码久久四虎 | 成人人人人人欧美片做爰 | 国产69精品久久久久777糖心 | 国产小视频免费在线观看 | 制服丝袜中文字幕第一页 | 免费无码无遮挡裸体视频 | 亚洲欧美人成电影在线观看 | 国产人成高清在线视频99 | 久久品道一品道久久精品 | 精品久久中文字幕 | 成人免费视频久久 | 丁香花视频高清在线观看 | 亚洲第一色站 | 日日摸日日碰夜夜爽无 | 日韩美女黄色片 | 亚洲日韩成人av无码网站 | 精品欧美激情精品一区 | 国产人成高清在线视频99最全资源 | 香蕉在线视频观看 | 国产在线操 | 99精品全国免费观看视频 | 成人欧美18 | 你懂的视频在线看 | 亚洲 欧美 自拍 美腿 卡通 | 少妇人禽zoz0伦视频 | 在线精品国精品国产尤物 | 小视频福利 | 永久免费无码网站在线观看个 | 国产精品无码久久一线 | 国产成人丝袜视频在线观看 | 蜜臀性色av免费 | 国产线播放免费人成视频播放 | 国产精品狼人久久久久影院 | 欧美色图一区二区三区 | 日韩av免费| 国产精品人妻一区二区高 | 国产清纯在线一区二区 | 欧美天堂一区二区三区 | 日本久久久www成人免费毛片丨 | 国产精品久久久久久99人妻精品 | 丰满大乳伦理少妇 | 成人性生交7777 | 99久久精品国产一区二区成人 | 久久精品国产72国产精 | 欧美一区二区三区影院 | 亚洲第一区在线视频 | 欧美成人免费网址 | 熟女俱乐部五十路六十路av | 国产偷人激情视频在线观看 | 亚洲手机在线 | 人摸人人人澡人人超碰 | 少妇性l交大片7724com | 日本免费三级网站 | 国内裸体无遮挡免费视频 | 国产亚洲精品久久情网 | 狠狠综合久久久久尤物丿 | 两个男人吮她的花蒂和奶水视频 | 国产亚洲精品aa片在线观看网站 | 大奶子情人 | 在线国产福利 | 五月婷婷在线观看视频 | 五月婷婷丁香在线 | 福利午夜视频 |