第一步:DBUtility层 用于底层操作SqlHelper(二)

2008-01-12 17:14

   ///


   /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified SqlConnection
   /// using the provided parameter values. This method will query the database to discover the parameters for the
   /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
   ///

   ///
   /// This method provides no access to output parameters or the stored procedure's return value parameter.
   ///
   /// e.g.:
   /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
   ///
   /// a valid SqlConnection
   /// the name of the stored procedure
   /// an array of objects to be assigned as the input values of the stored procedure
   /// a dataset containing the resultset generated by the command
   public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)
   {
    //if we receive parameter values, we need to figure out where they go
    if ((parameterValues != null) && (parameterValues.Length > 0))
    {
     //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
     SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);

     //assign the provided values to these parameters based on parameter order
     AssignParameterValues(commandParameters, parameterValues);

     //call the overload that takes an array of SqlParameters
     return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
    }
     //otherwise we can just call the SP without params
    else
    {
     return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
    }
   }

   ///


   /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided SqlTransaction.
   ///

   ///
   /// e.g.:
   /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
   ///
   /// a valid SqlTransaction
   /// the CommandType (stored procedure, text, etc.)
   /// the stored procedure name or T-SQL command
   /// a dataset containing the resultset generated by the command
   public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText)
   {
    //pass through the call providing null for the set of SqlParameters
    return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);
   }
   ///
   /// Execute a SqlCommand (that returns a resultset) against the specified SqlTransaction
   /// using the provided parameters.
   ///

   ///
   /// e.g.:
   /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
   ///
   /// a valid SqlTransaction
   /// the CommandType (stored procedure, text, etc.)
   /// the stored procedure name or T-SQL command
   /// an array of SqlParamters used to execute the command
   /// a dataset containing the resultset generated by the command
   public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
   {
    //create a command and prepare it for execution
    SqlCommand cmd = new SqlCommand();
    PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
    //create the DataAdapter & DataSet
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();

    //fill the DataSet using default values for DataTable names, etc.
    da.Fill(ds);
    // detach the SqlParameters from the command object, so they can be used again.
    cmd.Parameters.Clear();
    //return the dataset
    return ds;
   }
   ///


   /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
   /// SqlTransaction using the provided parameter values. This method will query the database to discover the parameters for the
   /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
   ///

   ///
   /// This method provides no access to output parameters or the stored procedure's return value parameter.
   ///
   /// e.g.:
   /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
   ///
   /// a valid SqlTransaction
   /// the name of the stored procedure
   /// an array of objects to be assigned as the input values of the stored procedure
   /// a dataset containing the resultset generated by the command
   public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)
   {
    //if we receive parameter values, we need to figure out where they go
    if ((parameterValues != null) && (parameterValues.Length > 0))
    {
     //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
     SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);

     //assign the provided values to these parameters based on parameter order
     AssignParameterValues(commandParameters, parameterValues);

     //call the overload that takes an array of SqlParameters
     return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
    }
     //otherwise we can just call the SP without params
    else
    {
     return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
    }
   }

   #endregion ExecuteDataSet
   #region ExecuteReader

   ///


   /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
   /// we can set the appropriate CommandBehavior when calling ExecuteReader()
   ///

   private enum SqlConnectionOwnership
   {
    /// Connection is owned and managed by SqlHelper
    Internal,
    /// Connection is owned and managed by the caller
    External
   }

   ///


   /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
   ///

   ///
   /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
   ///
   /// If the caller provided the connection, we want to leave it to them to manage.
   ///
   /// a valid SqlConnection, on which to execute this command
   /// a valid SqlTransaction, or 'null'
   /// the CommandType (stored procedure, text, etc.)
   /// the stored procedure name or T-SQL command
   /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
   /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
   /// SqlDataReader containing the results of the command
   private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)
   {
    //create a command and prepare it for execution
    SqlCommand cmd = new SqlCommand();
    PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
    //create a reader
    SqlDataReader dr;

    // call ExecuteReader with the appropriate CommandBehavior
    if (connectionOwnership == SqlConnectionOwnership.External)
    {
     dr = cmd.ExecuteReader();
    }
    else
    {
     dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }
    // detach the SqlParameters from the command object, so they can be used again.
    cmd.Parameters.Clear();
    return dr;
   }

   ///


   /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
   /// the connection string.
   ///

   ///
   /// e.g.:
   /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
   ///
   /// a valid connection string for a SqlConnection
   /// the CommandType (stored procedure, text, etc.)
   /// the stored procedure name or T-SQL command
   /// a SqlDataReader containing the resultset generated by the command
   public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
   {
    //pass through the call providing null for the set of SqlParameters
    return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
   }

   ///


   /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
   /// using the provided parameters.
   ///

   ///
   /// e.g.:
   /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
   ///
   /// a valid connection string for a SqlConnection
   /// the CommandType (stored procedure, text, etc.)
   /// the stored procedure name or T-SQL command
   /// an array of SqlParamters used to execute the command
   /// a SqlDataReader containing the resultset generated by the command
   public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
   {
    //create & open a SqlConnection
    SqlConnection cn = new SqlConnection(connectionString);
    cn.Open();

    try
    {
     //call the private overload that takes an internally owned connection in place of the connection string
     return ExecuteReader(cn, null, commandType, commandText, commandParameters,SqlConnectionOwnership.Internal);
    }
    catch
    {
     //if we fail to return the SqlDatReader, we need to close the connection ourselves
     cn.Close();
     throw;
    }
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值