加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

微软SQLHelper.cs类 中文版

发布时间:2021-07-06 05:55:30 所属栏目:大数据 来源: 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;才能调用。

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读