/// 执行指定事务的命令,返回DataSet. /// ///
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, \ ///
///
/// /// ///
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText) ...{
return (SqlParameter[])null); }
/**////
/// 执行指定事务的命令,指定参数,返回DataSet. /// ///
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, \new SqlParameter(\ ///
///
/// /// /// ///
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters) ...{
if( transaction == null ) throw new ArgumentNullException( \ if( transaction != null && transaction.Connection == null ) throw new ArgumentException( \transaction was rollbacked or commited, please provide an open transaction.\
// 预处理
SqlCommand cmd = new SqlCommand(); bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandText, commandParameters, out mustCloseConnection );
commandType,
ExecuteDataset(transaction,
commandType,
commandText,
// 创建 DataAdapter & DataSet
using( SqlDataAdapter da = new SqlDataAdapter(cmd) ) ...{
DataSet ds = new DataSet(); da.Fill(ds);
cmd.Parameters.Clear(); return ds; } }
/**////
/// 执行指定事务的命令,指定参数值,返回DataSet.
/// ///
/// 此方法不提供访问存储过程输入参数和返回值. /// 示例.:
/// DataSet ds = ExecuteDataset(trans, \ ///
///
/// /// ///
public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues) ...{
if( transaction == null ) throw new ArgumentNullException( \
if( transaction != null && transaction.Connection == null ) throw new ArgumentException( \transaction was rollbacked or commited, please provide an open transaction.\
if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( \
if ((parameterValues != null) && (parameterValues.Length > 0)) ...{
// 从缓存中加载存储过程参数 SqlParameter[]
// 给存储过程参数分配值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters); }
commandParameters
=
SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
else
...{
return ExecuteDataset(transaction, CommandType.StoredProcedure, spName); } }
#endregion ExecuteDataset数据集命令结束
ExecuteReader 数据阅读器#region ExecuteReader 数据阅读器
/**////
/// 枚举,标识数据库连接是由SqlHelper提供还是由调用者提供 ///
private enum SqlConnectionOwnership
...{
/**////
///
///
/// 执行指定数据库连接对象的数据阅读器.
/// ///
/// 如果是SqlHelper打开连接,当连接关闭DataReader也将关闭. /// 如果是调用都打开连接,DataReader由调用都管理.
///
/// ///
/// ///
///
///
///
private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership) ...{
if( connection == null ) throw new ArgumentNullException( \
bool mustCloseConnection = false;
// 创建命令
SqlCommand cmd = new SqlCommand(); try ...{
PrepareCommand(cmd, connection,
// 创建数据阅读器
SqlDataReader dataReader; transaction, commandType,
commandText, commandParameters, out mustCloseConnection );
command
if (connectionOwnership == SqlConnectionOwnership.External) ...{
dataReader = cmd.ExecuteReader(); } else ...{
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); }
// 清除参数,以便再次使用..
// 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 // 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;
}
}
/**////
/// 执行指定数据库连接字符串的数据阅读器. ///
///
/// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, \
///
/// /// /// ///
public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText) ...{
return ExecuteReader(connectionString, (SqlParameter[])null); }
/**////
/// 执行指定数据库连接字符串的数据阅读器,指定参数. /// ///
/// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, \ ///
///
/// ///
///
///
public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters) ...{
if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( \ SqlConnection connection = null; try ...{
commandType, commandText,