微软SQLHelper.cs类 中文版
发布时间:2021-05-20 14:35:24 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:using System;? using System.Data;? using System.Xml;? using System.Data.sqlClient;? using System.Collections;? using System.Configuration; namespace BookDAL? {? ? ? /// summary? ? ? /// sqlServer数据访问帮助类? ? ? /// /summary? ? ? public
using System;?
using System.Data;? using System.Xml;? using System.Data.sqlClient;? using System.Collections;? using System.Configuration; namespace BookDAL? {? ? ? /// <summary>? ? ? /// sqlServer数据访问帮助类? ? ? /// </summary>? ? ? public sealed class sqlHelper? ? ? {? ? ? ? ? #region 私有构造函数和方法 ? ? ? ? private sqlHelper() { } ? ? ? ? /// <summary>? ? ? ? ? /// 将sqlParameter参数数组(参数值)分配给sqlCommand命令.? ? ? ? ? /// 这个方法将给任何一个参数分配DBNull.Value;? ? ? ? ? /// 该操作将阻止默认值的使用.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="command">命令名</param>? ? ? ? ? /// <param name="commandParameters">sqlParameters数组</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)? ? ? ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? ? ? // 检查未分配值的输出参数,将其分配以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参数数组.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="commandParameters">要分配值的sqlParameter参数数组</param>? ? ? ? ? /// <param name="dataRow">将要分配给存储过程参数的DataRow</param>? ? ? ? ? private static void AssignParameterValues(sqlParameter[] commandParameters,DataRow dataRow)? ? ? ? ? {? ? ? ? ? ? ? if ((commandParameters == null) || (dataRow == null))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return;? ? ? ? ? ? ? } ? ? ? ? ? ? int i = 0;? ? ? ? ? ? ? // 设置参数值? ? ? ? ? ? ? foreach (sqlParameter commandParameter in commandParameters)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 创建参数名称,如果不存在,只抛出一个异常.? ? ? ? ? ? ? ? ? if (commandParameter.ParameterName == null ||? ? ? ? ? ? ? ? ? ? ? commandParameter.ParameterName.Length <= 1)? ? ? ? ? ? ? ? ? ? ? throw new Exception(? ? ? ? ? ? ? ? ? ? ? ? ? string.Format("请提供参数{0}一个有效的名称{1}.",i,commandParameter.ParameterName));? ? ? ? ? ? ? ? ? // 从dataRow的表中获取为参数数组中数组名称的列的索引.? ? ? ? ? ? ? ? ? // 如果存在和参数名称相同的列,则将列值赋给当前名称的参数.? ? ? ? ? ? ? ? ? if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1)) != -1)? ? ? ? ? ? ? ? ? ? ? commandParameter.Value = dataRow[commandParameter.ParameterName.Substring(1)];? ? ? ? ? ? ? ? ? i++;? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 将一个对象数组分配给sqlParameter参数数组.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="commandParameters">要分配值的sqlParameter参数数组</param>? ? ? ? ? /// <param name="parameterValues">将要分配给存储过程参数的对象数组</param>? ? ? ? ? private static void AssignParameterValues(sqlParameter[] commandParameters,object[] parameterValues)? ? ? ? ? {? ? ? ? ? ? ? if ((commandParameters == null) || (parameterValues == null))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return;? ? ? ? ? ? ? } ? ? ? ? ? ? // 确保对象数组个数与参数个数匹配,如果不匹配,抛出一个异常.? ? ? ? ? ? ? if (commandParameters.Length != parameterValues.Length)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? throw new ArgumentException("参数值个数与参数不匹配.");? ? ? ? ? ? ? } ? ? ? ? ? ? // 给参数赋值? ? ? ? ? ? ? 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>? ? ? ? ? /// 预处理用户提供的命令,数据库连接/事务/命令类型/参数? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="command">要处理的sqlCommand</param>? ? ? ? ? /// <param name="connection">数据库连接</param>? ? ? ? ? /// <param name="transaction">一个有效的事务或者是null值</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本,其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名或都T-sql命令文本</param>? ? ? ? ? /// <param name="commandParameters">和命令相关联的sqlParameter参数数组,如果没有参数为'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;? ? ? ? ? ? ? } ? ? ? ? ? ? // 给命令分配一个数据库连接.? ? ? ? ? ? ? command.Connection = connection; ? ? ? ? ? ? // 设置命令文本(存储过程名或sql语句)? ? ? ? ? ? ? command.CommandText = commandText; ? ? ? ? ? ? // 分配事务? ? ? ? ? ? ? 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;? ? ? ? ? ? ? } ? ? ? ? ? ? // 设置命令类型.? ? ? ? ? ? ? command.CommandType = commandType; ? ? ? ? ? ? // 分配命令参数? ? ? ? ? ? ? if (commandParameters != null)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? AttachParameters(command,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? return;? ? ? ? ? } ? ? ? ? #endregion 私有构造函数和方法结束 ? ? ? ? #region 数据库连接? ? ? ? ? /// <summary>? ? ? ? ? /// 一个有效的数据库连接字符串? ? ? ? ? /// </summary>? ? ? ? ? /// <returns></returns>? ? ? ? ? public static string GetConnSting()? ? ? ? ? {? ? ? ? ? ? ? return ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;? ? ? ? ? }? ? ? ? ? /// <summary>? ? ? ? ? /// 一个有效的数据库连接对象? ? ? ? ? /// </summary>? ? ? ? ? /// <returns></returns>? ? ? ? ? public static sqlConnection GetConnection()? ? ? ? ? {? ? ? ? ? ? ? sqlConnection Connection = new sqlConnection(sqlHelper.GetConnSting());? ? ? ? ? ? ? return Connection;? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region ExecuteNonQuery命令 ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接字符串,类型的sqlCommand.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(connString,CommandType.StoredProcedure,"PublishOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或sql语句</param>? ? ? ? ? /// <returns>返回命令影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(string connectionString,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteNonQuery(connectionString,commandType,commandText,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接字符串,类型的sqlCommand.如果没有提供参数,不返回结果.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(connString,"PublishOrders",new sqlParameter("@prodid",24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParameter参数数组</param>? ? ? ? ? /// <returns>返回命令影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(string connectionString,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString"); ? ? ? ? ? ? using (sqlConnection connection = new sqlConnection(connectionString))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? connection.Open(); ? ? ? ? ? ? ? ? return ExecuteNonQuery(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接字符串的存储过程,将对象数组的值赋给存储过程参数,? ? ? ? ? /// 此方法需要在参数缓存方法中探索参数并生成参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 这个方法没有提供访问输出参数和返回值.? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(connString,24,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串/param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配到存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回受影响的行数</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"); ? ? ? ? ? ? // 如果存在参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从探索存储过程参数(加载到缓存)并分配给存储过程参数数组.? ? ? ? ? ? ? ? ? sqlParameter[] commandParameters = sqlHelperParameterCache.GetSpParameterSet(connectionString,spName); ? ? ? ? ? ? ? ? // 给存储过程参数赋值? ? ? ? ? ? ? ? ? AssignParameterValues(commandParameters,parameterValues); ? ? ? ? ? ? ? ? return ExecuteNonQuery(connectionString,spName,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数情况下? ? ? ? ? ? ? ? ? return ExecuteNonQuery(connectionString,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(conn,"PublishOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(sqlConnection connection,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteNonQuery(connection,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(conn,24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>? ? ? ? ? /// <param name="commandText">T存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(sqlConnection connection,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection"); ? ? ? ? ? ? // 创建sqlCommand命令,并进行预处理? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand();? ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? PrepareCommand(cmd,connection,(sqlTransaction)null,commandParameters,out mustCloseConnection); ? ? ? ? ? ? // Finally,execute the command? ? ? ? ? ? ? int retval = cmd.ExecuteNonQuery(); ? ? ? ? ? ? // 清除参数,以便再次使用.? ? ? ? ? ? ? cmd.Parameters.Clear();? ? ? ? ? ? ? if (mustCloseConnection)? ? ? ? ? ? ? ? ? connection.Close();? ? ? ? ? ? ? return retval;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,将对象数组的值赋给存储过程参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(sqlConnection connection,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 ExecuteNonQuery(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteNonQuery(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行带事务的sqlCommand.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例.: ? ? ? ? ? /// ?int result = ExecuteNonQuery(trans,"PublishOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回影响的行数/returns>? ? ? ? ? public static int ExecuteNonQuery(sqlTransaction transaction,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteNonQuery(transaction,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行带事务的sqlCommand(指定参数).? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(trans,"GetOrders",24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(sqlTransaction transaction,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,"transaction"); ? ? ? ? ? ? // 预处理? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand();? ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? PrepareCommand(cmd,transaction.Connection,transaction,out mustCloseConnection); ? ? ? ? ? ? // 执行? ? ? ? ? ? ? int retval = cmd.ExecuteNonQuery(); ? ? ? ? ? ? // 清除参数集,以便再次使用.? ? ? ? ? ? ? cmd.Parameters.Clear();? ? ? ? ? ? ? return retval;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行带事务的sqlCommand(指定参数值).? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int result = ExecuteNonQuery(conn,trans,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回受影响的行数</returns>? ? ? ? ? public static int ExecuteNonQuery(sqlTransaction transaction,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,"transaction");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()? ? ? ? ? ? ? ? ? sqlParameter[] commandParameters = sqlHelperParameterCache.GetSpParameterSet(transaction.Connection,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteNonQuery(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteNonQuery(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ExecuteNonQuery方法结束 ? ? ? ? #region ExecuteDataset方法 ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?DataSet ds = ExecuteDataset(connString,"GetOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(string connectionString,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteDataset(connectionString,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例:? ? ? ? ? /// ?DataSet ds = ExecuteDataset(connString,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamters参数数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(string connectionString,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString"); ? ? ? ? ? ? // 创建并打开数据库连接对象,操作完成释放对象.? ? ? ? ? ? ? using (sqlConnection connection = new sqlConnection(connectionString))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? connection.Open(); ? ? ? ? ? ? ? ? // 调用指定数据库连接字符串重载方法.? ? ? ? ? ? ? ? ? return ExecuteDataset(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,直接提供参数值,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值.? ? ? ? ? /// 示例:? ? ? ? ? /// ?DataSet ds = ExecuteDataset(connString,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(string connectionString,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 ExecuteDataset(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteDataset(connectionString,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?DataSet ds = ExecuteDataset(conn,"GetOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlConnection connection,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteDataset(connection,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,指定存储过程参数,24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlConnection connection,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection"); ? ? ? ? ? ? // 预处理? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand();? ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? PrepareCommand(cmd,out mustCloseConnection); ? ? ? ? ? ? // 创建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>? ? ? ? ? /// 执行指定数据库连接对象的命令,指定参数值,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输入参数和返回值.? ? ? ? ? /// 示例.: ? ? ? ? ? /// ?DataSet ds = ExecuteDataset(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlConnection connection,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,parameterValues); ? ? ? ? ? ? ? ? return ExecuteDataset(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteDataset(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定事务的命令,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?DataSet ds = ExecuteDataset(trans,"GetOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlTransaction transaction,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteDataset(transaction,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定事务的命令,指定参数,24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlTransaction transaction,out mustCloseConnection); ? ? ? ? ? ? // 创建 DataAdapter & DataSet? ? ? ? ? ? ? using (sqlDataAdapter da = new sqlDataAdapter(cmd))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? DataSet ds = new DataSet();? ? ? ? ? ? ? ? ? da.Fill(ds);? ? ? ? ? ? ? ? ? cmd.Parameters.Clear();? ? ? ? ? ? ? ? ? return ds;? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定事务的命令,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输入参数和返回值.? ? ? ? ? /// 示例.: ? ? ? ? ? /// ?DataSet ds = ExecuteDataset(trans,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">事务</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet</returns>? ? ? ? ? public static DataSet ExecuteDataset(sqlTransaction transaction,"transaction");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数? ? ? ? ? ? ? ? ? sqlParameter[] commandParameters = sqlHelperParameterCache.GetSpParameterSet(transaction.Connection,parameterValues); ? ? ? ? ? ? ? ? return ExecuteDataset(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteDataset(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ExecuteDataset数据集命令结束 ? ? ? ? #region ExecuteReader 数据阅读器 ? ? ? ? /// <summary>? ? ? ? ? /// 枚举,标识数据库连接是由sqlHelper提供还是由调用者提供? ? ? ? ? /// </summary>? ? ? ? ? private enum sqlConnectionOwnership? ? ? ? ? {? ? ? ? ? ? ? /// <summary>由sqlHelper提供连接</summary>? ? ? ? ? ? ? Internal,? ? ? ? ? ? ? /// <summary>由调用者提供连接</summary>? ? ? ? ? ? ? External? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的数据阅读器.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 如果是sqlHelper打开连接,当连接关闭DataReader也将关闭.? ? ? ? ? /// 如果是调用都打开连接,DataReader由调用都管理.? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="transaction">一个有效的事务,或者为 'null'</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParameters参数数组,如果没有参数则为'null'</param>? ? ? ? ? /// <param name="connectionOwnership">标识数据库连接对象是由调用者提供还是由sqlHelper提供</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? private static sqlDataReader ExecuteReader(sqlConnection connection,sqlConnectionOwnership connectionOwnership)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection"); ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? // 创建命令? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand();? ? ? ? ? ? ? try? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? PrepareCommand(cmd,out mustCloseConnection); ? ? ? ? ? ? ? ? // 创建数据阅读器? ? ? ? ? ? ? ? ? sqlDataReader dataReader; ? ? ? ? ? ? ? ? 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 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>? ? ? ? ? /// 执行指定数据库连接字符串的数据阅读器.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(connString,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(string connectionString,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteReader(connectionString,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的数据阅读器,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(connString,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组(new sqlParameter("@prodid",24))</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(string connectionString,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,sqlConnectionOwnership.Internal);? ? ? ? ? ? ? }? ? ? ? ? ? ? catch? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // If we fail to return the sqlDatReader,we need to close the connection ourselves? ? ? ? ? ? ? ? ? if (connection != null) connection.Close();? ? ? ? ? ? ? ? ? throw;? ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的数据阅读器,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(connString,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(string connectionString,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,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteReader(connectionString,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的数据阅读器.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(conn,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名或T-sql语句</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlConnection connection,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteReader(connection,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(conn,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandParameters">sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlConnection connection,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteReader(connection,sqlConnectionOwnership.External);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">T存储过程名</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlConnection connection,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,parameterValues); ? ? ? ? ? ? ? ? return ExecuteReader(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return ExecuteReader(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(trans,"GetOrders");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlTransaction transaction,string commandText)? ? ? ? ? {? ? ? ? ? ? ? return ExecuteReader(transaction,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ? sqlDataReader dr = ExecuteReader(trans,24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlTransaction transaction,"transaction"); ? ? ? ? ? ? return ExecuteReader(transaction.Connection,sqlConnectionOwnership.External);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlDataReader dr = ExecuteReader(trans,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReader(sqlTransaction transaction,"transaction");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? sqlParameter[] commandParameters = sqlHelperParameterCache.GetSpParameterSet(transaction.Connection,parameterValues); ? ? ? ? ? ? ? ? return ExecuteReader(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteReader(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ExecuteReader数据阅读器 ? ? ? ? #region ExecuteScalar 返回结果集中的第一行第一列 ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(connString,"GetOrderCount");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(string connectionString,string commandText)? ? ? ? ? {? ? ? ? ? ? ? // 执行参数为空的方法? ? ? ? ? ? ? return ExecuteScalar(connectionString,"GetOrderCount",命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(string connectionString,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");? ? ? ? ? ? ? // 创建并打开数据库连接对象,操作完成释放对象.? ? ? ? ? ? ? using (sqlConnection connection = new sqlConnection(connectionString))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? connection.Open(); ? ? ? ? ? ? ? ? // 调用指定数据库连接字符串重载方法.? ? ? ? ? ? ? ? ? return ExecuteScalar(connection,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(connString,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(string connectionString,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,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteScalar(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteScalar(connectionString,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(conn,"GetOrderCount");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlConnection connection,string commandText)? ? ? ? ? {? ? ? ? ? ? ? // 执行参数为空的方法? ? ? ? ? ? ? return ExecuteScalar(connection,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlConnection connection,并进行预处理? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand(); ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? PrepareCommand(cmd,out mustCloseConnection); ? ? ? ? ? ? // 执行sqlCommand命令,并返回结果.? ? ? ? ? ? ? object retval = cmd.ExecuteScalar(); ? ? ? ? ? ? // 清除参数,以便再次使用.? ? ? ? ? ? ? cmd.Parameters.Clear(); ? ? ? ? ? ? if (mustCloseConnection)? ? ? ? ? ? ? ? ? connection.Close(); ? ? ? ? ? ? return retval;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlConnection connection,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,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteScalar(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteScalar(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(trans,"GetOrderCount");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlTransaction transaction,string commandText)? ? ? ? ? {? ? ? ? ? ? ? // 执行参数为空的方法? ? ? ? ? ? ? return ExecuteScalar(transaction,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlTransaction transaction,"transaction"); ? ? ? ? ? ? // 创建sqlCommand命令,以便再次使用.? ? ? ? ? ? ? cmd.Parameters.Clear();? ? ? ? ? ? ? return retval;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?int orderCount = (int)ExecuteScalar(trans,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalar(sqlTransaction transaction,"transaction");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // PPull the parameters for this stored procedure from the parameter cache ()? ? ? ? ? ? ? ? ? sqlParameter[] commandParameters = sqlHelperParameterCache.GetSpParameterSet(transaction.Connection,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteScalar(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteScalar(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ExecuteScalar ? ? ? ? #region ExecuteXmlReader XML阅读器? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的sqlCommand命令,并产生一个XmlReader对象做为结果集返回.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(conn,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句 using "FOR XML AUTO"</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlConnection connection,string commandText)? ? ? ? ? {? ? ? ? ? ? ? // 执行参数为空的方法? ? ? ? ? ? ? return ExecuteXmlReader(connection,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的sqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(conn,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句 using "FOR XML AUTO"</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlConnection connection,params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection"); ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? // 创建sqlCommand命令,并进行预处理? ? ? ? ? ? ? sqlCommand cmd = new sqlCommand();? ? ? ? ? ? ? try? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? PrepareCommand(cmd,out mustCloseConnection); ? ? ? ? ? ? ? ? // 执行命令? ? ? ? ? ? ? ? ? XmlReader retval = cmd.ExecuteXmlReader(); ? ? ? ? ? ? ? ? // 清除参数,以便再次使用.? ? ? ? ? ? ? ? ? cmd.Parameters.Clear(); ? ? ? ? ? ? ? ? return retval;? ? ? ? ? ? ? }? ? ? ? ? ? ? catch? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? if (mustCloseConnection)? ? ? ? ? ? ? ? ? ? ? connection.Close();? ? ? ? ? ? ? ? ? throw;? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的sqlCommand命令,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称 using "FOR XML AUTO"</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlConnection connection,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteXmlReader(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteXmlReader(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的sqlCommand命令,并产生一个XmlReader对象做为结果集返回.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(trans,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句 using "FOR XML AUTO"</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlTransaction transaction,string commandText)? ? ? ? ? {? ? ? ? ? ? ? // 执行参数为空的方法? ? ? ? ? ? ? return ExecuteXmlReader(transaction,(sqlParameter[])null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的sqlCommand命令,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(trans,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句 using "FOR XML AUTO"</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlTransaction transaction,out mustCloseConnection); ? ? ? ? ? ? // 执行命令? ? ? ? ? ? ? XmlReader retval = cmd.ExecuteXmlReader(); ? ? ? ? ? ? // 清除参数,以便再次使用.? ? ? ? ? ? ? cmd.Parameters.Clear();? ? ? ? ? ? ? return retval;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的sqlCommand命令,指定参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?XmlReader r = ExecuteXmlReader(trans,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReader(sqlTransaction transaction,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? return ExecuteXmlReader(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? return ExecuteXmlReader(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ExecuteXmlReader 阅读器结束 ? ? ? ? #region FillDataset 填充数据集? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(connString,ds,new string[] {"orders"});? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)</param>? ? ? ? ? public static void FillDataset(string connectionString,DataSet dataSet,string[] tableNames)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");? ? ? ? ? ? ? if (dataSet == null) throw new ArgumentNullException("dataSet"); ? ? ? ? ? ? // 创建并打开数据库连接对象,操作完成释放对象.? ? ? ? ? ? ? using (sqlConnection connection = new sqlConnection(connectionString))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? connection.Open(); ? ? ? ? ? ? ? ? // 调用指定数据库连接字符串重载方法.? ? ? ? ? ? ? ? ? FillDataset(connection,dataSet,tableNames);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.指定命令参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(connString,new string[] {"orders"},命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? public static void FillDataset(string connectionString,? ? ? ? ? ? ? string commandText,string[] tableNames,? ? ? ? ? ? ? params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");? ? ? ? ? ? ? if (dataSet == null) throw new ArgumentNullException("dataSet");? ? ? ? ? ? ? // 创建并打开数据库连接对象,tableNames,映射数据表并填充数据集,指定存储过程参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(connString,24);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param> ? ? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? public static void FillDataset(string connectionString,? ? ? ? ? ? ? DataSet dataSet,? ? ? ? ? ? ? params object[] parameterValues)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");? ? ? ? ? ? ? if (dataSet == null) throw new ArgumentNullException("dataSet");? ? ? ? ? ? ? // 创建并打开数据库连接对象,parameterValues);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,映射数据表并填充数据集.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(conn,new string[] {"orders"});? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param> ? ? ? ? ? ? public static void FillDataset(sqlConnection connection,string[] tableNames)? ? ? ? ? {? ? ? ? ? ? ? FillDataset(connection,null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(conn,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? public static void FillDataset(sqlConnection connection,? ? ? ? ? ? ? params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? FillDataset(connection,commandParameters);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库连接对象的命令,指定存储过程参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(conn,36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? public static void FillDataset(sqlConnection connection,? ? ? ? ? ? ? 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"); ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? FillDataset(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? FillDataset(connection,tableNames);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,映射数据表并填充数据集.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(trans,new string[] {"orders"});? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? public static void FillDataset(sqlTransaction transaction,string[] tableNames)? ? ? ? ? {? ? ? ? ? ? ? FillDataset(transaction,null);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,指定参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(trans,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? public static void FillDataset(sqlTransaction transaction,? ? ? ? ? ? ? params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? FillDataset(transaction.Connection,commandParameters);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定数据库事务的命令,指定存储过程参数值.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 此方法不提供访问存储过程输出参数和返回值参数.? ? ? ? ? ///? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(trans,new string[]{"orders"},36);? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>? ? ? ? ? public static void FillDataset(sqlTransaction transaction,? ? ? ? ? ? ? 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,"transaction");? ? ? ? ? ? ? if (dataSet == null) throw new ArgumentNullException("dataSet");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((parameterValues != null) && (parameterValues.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,parameterValues); ? ? ? ? ? ? ? ? // 调用重载方法? ? ? ? ? ? ? ? ? FillDataset(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 没有参数值? ? ? ? ? ? ? ? ? FillDataset(transaction,tableNames);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [私有方法][内部调用]执行指定数据库连接对象/事务的命令,DataSet/TableNames/sqlParameters.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?FillDataset(conn,24));? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="transaction">一个有效的连接事务</param>? ? ? ? ? /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>? ? ? ? ? /// <param name="commandText">存储过程名称或T-sql语句</param>? ? ? ? ? /// <param name="dataSet">要填充结果集的DataSet实例</param>? ? ? ? ? /// <param name="tableNames">表映射的数据表数组? ? ? ? ? /// 用户定义的表名 (可有是实际的表名.)? ? ? ? ? /// </param>? ? ? ? ? /// <param name="commandParameters">分配给命令的sqlParamter参数数组</param>? ? ? ? ? private static void FillDataset(sqlConnection connection,? ? ? ? ? ? ? params sqlParameter[] commandParameters)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection");? ? ? ? ? ? ? if (dataSet == null) throw new ArgumentNullException("dataSet"); ? ? ? ? ? ? // 创建sqlCommand命令,并进行预处理? ? ? ? ? ? ? sqlCommand command = new sqlCommand();? ? ? ? ? ? ? bool mustCloseConnection = false;? ? ? ? ? ? ? PrepareCommand(command,out mustCloseConnection); ? ? ? ? ? ? // 执行命令? ? ? ? ? ? ? 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();? ? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? // 填充数据集使用默认表名称? ? ? ? ? ? ? ? ? dataAdapter.Fill(dataSet); ? ? ? ? ? ? ? ? // 清除参数,以便再次使用.? ? ? ? ? ? ? ? ? command.Parameters.Clear();? ? ? ? ? ? ? } ? ? ? ? ? ? if (mustCloseConnection)? ? ? ? ? ? ? ? ? connection.Close();? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region UpdateDataset 更新数据集? ? ? ? ? /// <summary>? ? ? ? ? /// 执行数据集更新到数据库,指定inserted,updated,or deleted命令.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?UpdateDataset(conn,insertCommand,deleteCommand,updateCommand,"Order");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="insertCommand">[追加记录]一个有效的T-sql语句或存储过程</param>? ? ? ? ? /// <param name="deleteCommand">[删除记录]一个有效的T-sql语句或存储过程</param>? ? ? ? ? /// <param name="updateCommand">[更新记录]一个有效的T-sql语句或存储过程</param>? ? ? ? ? /// <param name="dataSet">要更新到数据库的DataSet</param>? ? ? ? ? /// <param name="tableName">要更新到数据库的DataTable</param>? ? ? ? ? public static void UpdateDataset(sqlCommand insertCommand,sqlCommand deleteCommand,sqlCommand updateCommand,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"); ? ? ? ? ? ? // 创建sqlDataAdapter,当操作完成后释放.? ? ? ? ? ? ? using (sqlDataAdapter dataAdapter = new sqlDataAdapter())? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 设置数据适配器命令? ? ? ? ? ? ? ? ? dataAdapter.UpdateCommand = updateCommand;? ? ? ? ? ? ? ? ? dataAdapter.InsertCommand = insertCommand;? ? ? ? ? ? ? ? ? dataAdapter.DeleteCommand = deleteCommand; ? ? ? ? ? ? ? ? // 更新数据集改变到数据库? ? ? ? ? ? ? ? ? dataAdapter.Update(dataSet,tableName); ? ? ? ? ? ? ? ? // 提交所有改变到数据集.? ? ? ? ? ? ? ? ? dataSet.AcceptChanges();? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region CreateCommand 创建一条sqlCommand命令? ? ? ? ? /// <summary>? ? ? ? ? /// 创建sqlCommand命令,指定数据库连接对象,存储过程名和参数.? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 示例: ? ? ? ? ? /// ?sqlCommand command = CreateCommand(conn,"AddCustomer","CustomerID","CustomerName");? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="sourceColumns">源表的列名称数组</param>? ? ? ? ? /// <returns>返回sqlCommand命令</returns>? ? ? ? ? public static sqlCommand CreateCommand(sqlConnection connection,params string[] sourceColumns)? ? ? ? ? {? ? ? ? ? ? ? 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; ? ? ? ? ? ? // 如果有参数值? ? ? ? ? ? ? if ((sourceColumns != null) && (sourceColumns.Length > 0))? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,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 类型化参数(DataRow)? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回受影响的行数.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回影响的行数</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)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,spName); ? ? ? ? ? ? ? ? // 分配参数值? ? ? ? ? ? ? ? ? AssignParameterValues(commandParameters,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(connectionString,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接对象的存储过程,返回受影响的行数.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQueryTypedParams(sqlConnection connection,DataRow dataRow)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果row有值,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库事物的存储过程,返回受影响的行数.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="transaction">一个有效的连接事务 object</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回影响的行数</returns>? ? ? ? ? public static int ExecuteNonQueryTypedParams(sqlTransaction transaction,DataRow dataRow)? ? ? ? ? {? ? ? ? ? ? ? if (transaction == null) throw new ArgumentNullException("transaction");? ? ? ? ? ? ? if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited,"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)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? // 从缓存中加载存储过程参数,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteNonQuery(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region ExecuteDatasetTypedParams 类型化参数(DataRow)? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接字符串的存储过程,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet.</returns>? ? ? ? ? public static DataSet ExecuteDatasetTypedParams(string connectionString,DataRow dataRow)? ? ? ? ? {? ? ? ? ? ? ? if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? //如果row有值,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(connectionString,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet.</returns>? ? ? ? ? ///? ? ? ? ? public static DataSet ExecuteDatasetTypedParams(sqlConnection connection,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(connection,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库事务的存储过程,返回DataSet.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="transaction">一个有效的连接事务 object</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回一个包含结果集的DataSet.</returns>? ? ? ? ? public static DataSet ExecuteDatasetTypedParams(sqlTransaction transaction,"transaction");? ? ? ? ? ? ? if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName"); ? ? ? ? ? ? // 如果row有值,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteDataset(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region ExecuteReaderTypedParams 类型化参数(DataRow)? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接字符串的存储过程,返回DataReader.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReaderTypedParams(String connectionString,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(connectionString,spName);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接对象的存储过程,返回DataReader.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReaderTypedParams(sqlConnection connection,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(connection,返回DataReader.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="transaction">一个有效的连接事务 object</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回包含结果集的sqlDataReader</returns>? ? ? ? ? public static sqlDataReader ExecuteReaderTypedParams(sqlTransaction transaction,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteReader(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region ExecuteScalarTypedParams 类型化参数(DataRow)? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接字符串的存储过程,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalarTypedParams(String connectionString,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(connectionString,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(connectionString,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalarTypedParams(sqlConnection connection,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(connection,返回结果集中的第一行第一列.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="transaction">一个有效的连接事务 object</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回结果集中的第一行第一列</returns>? ? ? ? ? public static object ExecuteScalarTypedParams(sqlTransaction transaction,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteScalar(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? ? #endregion ? ? ? ? #region ExecuteXmlReaderTypedParams 类型化参数(DataRow)? ? ? ? ? /// <summary>? ? ? ? ? /// 执行指定连接数据库连接对象的存储过程,返回XmlReader类型的结果集.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReaderTypedParams(sqlConnection connection,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteXmlReader(connection,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteXmlReader(connection,返回XmlReader类型的结果集.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="transaction">一个有效的连接事务 object</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="dataRow">使用DataRow作为参数值</param>? ? ? ? ? /// <returns>返回XmlReader结果集对象.</returns>? ? ? ? ? public static XmlReader ExecuteXmlReaderTypedParams(sqlTransaction transaction,dataRow); ? ? ? ? ? ? ? ? return sqlHelper.ExecuteXmlReader(transaction,commandParameters);? ? ? ? ? ? ? }? ? ? ? ? ? ? else? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return sqlHelper.ExecuteXmlReader(transaction,spName);? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? ? #endregion ? ? } ? ? /// <summary>? ? ? /// sqlHelperParameterCache提供缓存存储过程参数,并能够在运行时从存储过程中探索参数.? ? ? /// </summary>? ? ? public sealed class sqlHelperParameterCache? ? ? {? ? ? ? ? #region 私有方法,字段,构造函数? ? ? ? ? // 私有构造函数,妨止类被实例化.? ? ? ? ? private sqlHelperParameterCache() { } ? ? ? ? // 这个方法要注意? ? ? ? ? private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable()); ? ? ? ? /// <summary>? ? ? ? ? /// 探索运行时的存储过程,返回sqlParameter参数数组.? ? ? ? ? /// 初始化参数值为 DBNull.Value.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接</param>? ? ? ? ? /// <param name="spName">存储过程名称</param>? ? ? ? ? /// <param name="includeReturnValueParameter">是否包含返回值参数</param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? private static sqlParameter[] DiscoverSpParameterSet(sqlConnection connection,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指定的存储过程的参数信息,并填充到cmd的Parameters参数集中.? ? ? ? ? ? ? sqlCommandBuilder.DeriveParameters(cmd);? ? ? ? ? ? ? connection.Close();? ? ? ? ? ? ? // 如果不包含返回值参数,将参数集中的每一个参数删除.? ? ? ? ? ? ? if (!includeReturnValueParameter)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? cmd.Parameters.RemoveAt(0);? ? ? ? ? ? ? } ? ? ? ? ? ? // 创建参数数组? ? ? ? ? ? ? sqlParameter[] discoveredParameters = new sqlParameter[cmd.Parameters.Count];? ? ? ? ? ? ? // 将cmd的Parameters参数集复制到discoveredParameters数组.? ? ? ? ? ? ? cmd.Parameters.CopyTo(discoveredParameters,0); ? ? ? ? ? ? // 初始化参数值为 DBNull.Value.? ? ? ? ? ? ? foreach (sqlParameter discoveredParameter in discoveredParameters)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? discoveredParameter.Value = DBNull.Value;? ? ? ? ? ? ? }? ? ? ? ? ? ? return discoveredParameters;? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// sqlParameter参数数组的深层拷贝.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="originalParameters">原始参数数组</param>? ? ? ? ? /// <returns>返回一个同样的参数数组</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 私有方法,构造函数结束 ? ? ? ? #region 缓存方法 ? ? ? ? /// <summary>? ? ? ? ? /// 追加参数数组到缓存.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符串</param>? ? ? ? ? /// <param name="commandText">存储过程名或sql语句</param>? ? ? ? ? /// <param name="commandParameters">要缓存的参数数组</param>? ? ? ? ? public static void CacheParameterSet(string connectionString,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>? ? ? ? ? /// 从缓存中获取参数数组.? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符</param>? ? ? ? ? /// <param name="commandText">存储过程名或sql语句</param>? ? ? ? ? /// <returns>参数数组</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 缓存方法结束 ? ? ? ? #region 检索指定的存储过程的参数集 ? ? ? ? /// <summary>? ? ? ? ? /// 返回指定的存储过程的参数集? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 这个方法将查询数据库,并将信息存储到缓存.? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? public static sqlParameter[] GetSpParameterSet(string connectionString,string spName)? ? ? ? ? {? ? ? ? ? ? ? return GetSpParameterSet(connectionString,false);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// 返回指定的存储过程的参数集? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 这个方法将查询数据库,并将信息存储到缓存.? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connectionString">一个有效的数据库连接字符.</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="includeReturnValueParameter">是否包含返回值参数</param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? public static sqlParameter[] GetSpParameterSet(string connectionString,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,includeReturnValueParameter);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [内部]返回指定的存储过程的参数集(使用连接对象).? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 这个方法将查询数据库,并将信息存储到缓存.? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接字符</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? internal static sqlParameter[] GetSpParameterSet(sqlConnection connection,string spName)? ? ? ? ? {? ? ? ? ? ? ? return GetSpParameterSet(connection,false);? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [内部]返回指定的存储过程的参数集(使用连接对象)? ? ? ? ? /// </summary>? ? ? ? ? /// <remarks>? ? ? ? ? /// 这个方法将查询数据库,并将信息存储到缓存.? ? ? ? ? /// </remarks>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="includeReturnValueParameter">? ? ? ? ? /// 是否包含返回值参数? ? ? ? ? /// </param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? internal static sqlParameter[] GetSpParameterSet(sqlConnection connection,bool includeReturnValueParameter)? ? ? ? ? {? ? ? ? ? ? ? if (connection == null) throw new ArgumentNullException("connection");? ? ? ? ? ? ? using (sqlConnection clonedConnection = (sqlConnection)((ICloneable)connection).Clone())? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? return GetSpParameterSetInternal(clonedConnection,includeReturnValueParameter);? ? ? ? ? ? ? }? ? ? ? ? } ? ? ? ? /// <summary>? ? ? ? ? /// [私有]返回指定的存储过程的参数集(使用连接对象)? ? ? ? ? /// </summary>? ? ? ? ? /// <param name="connection">一个有效的数据库连接对象</param>? ? ? ? ? /// <param name="spName">存储过程名</param>? ? ? ? ? /// <param name="includeReturnValueParameter">是否包含返回值参数</param>? ? ? ? ? /// <returns>返回sqlParameter参数数组</returns>? ? ? ? ? private static sqlParameter[] GetSpParameterSetInternal(sqlConnection connection,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,includeReturnValueParameter);? ? ? ? ? ? ? ? ? paramCache[hashKey] = spParameters;? ? ? ? ? ? ? ? ? cachedParameters = spParameters;? ? ? ? ? ? ? } ? ? ? ? ? ? return CloneParameters(cachedParameters);? ? ? ? ? } ? ? ? ? #endregion 参数集检索结束 ? ? }? } 如果要获取连接数据连接对象或字符串的话,先要修改sqlHelper类中GetConnSting() 方法中的ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;才能调用。 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |