微软mysql sqlhelper_【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

usingSystem;usingSystem.Data;usingSystem.Xml;usingSystem.Data.SqlClient;usingSystem.Collections;namespaceBook.DAL

{///

///SqlServer数据访问帮助类///

public sealed classSqlHelper

{#region 私有构造函数和方法

privateSqlHelper() {}///

///将SqlParameter参数数组(参数值)分配给SqlCommand命令.///这个方法将给任何一个参数分配DBNull.Value;///该操作将阻止默认值的使用.///

/// 命令名

/// SqlParameters数组

private static voidAttachParameters(SqlCommand command, SqlParameter[] commandParameters)

{if( command == null ) throw new ArgumentNullException( "command");if( commandParameters != null)

{foreach (SqlParameter p incommandParameters)

{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);

}

}

}

}///

///将DataRow类型的列值分配到SqlParameter参数数组.///

/// 要分配值的SqlParameter参数数组

/// 将要分配给存储过程参数的DataRow

private static voidAssignParameterValues(SqlParameter[] commandParameters, DataRow dataRow)

{if ((commandParameters == null) || (dataRow == null))

{return;

}int i = 0;//设置参数值

foreach(SqlParameter commandParameter incommandParameters)

{//创建参数名称,如果不存在,只抛出一个异常.

if( commandParameter.ParameterName == null ||commandParameter.ParameterName.Length<= 1)throw newException(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++;

}

}///

///将一个对象数组分配给SqlParameter参数数组.///

/// 要分配值的SqlParameter参数数组

/// 将要分配给存储过程参数的对象数组

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] isIDbDataParameter)

{

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];

}

}

}///

///预处理用户提供的命令,数据库连接/事务/命令类型/参数///

/// 要处理的SqlCommand

/// 数据库连接

/// 一个有效的事务或者是null值

/// 命令类型 (存储过程,命令文本, 其它.)

/// 存储过程名或都T-SQL命令文本

/// 和命令相关联的SqlParameter参数数组,如果没有参数为'null'

/// true如果连接是打开的,则为true,其它情况下为false.

private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, out boolmustCloseConnection )

{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 ExecuteNonQuery命令

///

///执行指定连接字符串,类型的SqlCommand.///

///

///示例:///int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本, 其它.)

/// 存储过程名称或SQL语句

/// 返回命令影响的行数

public static int ExecuteNonQuery(string connectionString, CommandType commandType, stringcommandText)

{return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);

}///

///执行指定连接字符串,类型的SqlCommand.如果没有提供参数,不返回结果.///

///

///示例:///int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本, 其它.)

/// 存储过程名称或SQL语句

/// SqlParameter参数数组

/// 返回命令影响的行数

public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();returnExecuteNonQuery(connection, commandType, commandText, commandParameters);

}

}///

///执行指定连接字符串的存储过程,将对象数组的值赋给存储过程参数,///此方法需要在参数缓存方法中探索参数并生成参数.///

///

///这个方法没有提供访问输出参数和返回值.///示例:///int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);///

/// 一个有效的数据库连接字符串/param>/// 存储过程名称

/// 分配到存储过程输入参数的对象数组

/// 返回受影响的行数

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);returnExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数情况下

returnExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库连接对象的命令///

///

///示例:///int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");///

/// 一个有效的数据库连接对象

/// 命令类型(存储过程,命令文本或其它.)

/// 存储过程名称或T-SQL语句

/// 返回影响的行数

public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, stringcommandText)

{return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接对象的命令///

///

///示例:///int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型(存储过程,命令文本或其它.)

/// T存储过程名称或T-SQL语句

/// SqlParamter参数数组

/// 返回影响的行数

public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connection == null ) throw new ArgumentNullException( "connection");//创建SqlCommand命令,并进行预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, outmustCloseConnection );//Finally, execute the command

int retval =cmd.ExecuteNonQuery();//清除参数,以便再次使用.

cmd.Parameters.Clear();if( mustCloseConnection )

connection.Close();returnretval;

}///

///执行指定数据库连接对象的命令,将对象数组的值赋给存储过程参数.///

///

///此方法不提供访问存储过程输出参数和返回值///示例:///int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回影响的行数

public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//给存储过程分配参数值

AssignParameterValues(commandParameters, parameterValues);returnExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteNonQuery(connection, CommandType.StoredProcedure, spName);

}

}///

///执行带事务的SqlCommand.///

///

///示例.:///int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");///

/// 一个有效的数据库连接对象

/// 命令类型(存储过程,命令文本或其它.)

/// 存储过程名称或T-SQL语句

/// 返回影响的行数/returns>

public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, stringcommandText)

{return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter[])null);

}///

///执行带事务的SqlCommand(指定参数).///

///

///示例:///int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型(存储过程,命令文本或其它.)

/// 存储过程名称或T-SQL语句

/// SqlParamter参数数组

/// 返回影响的行数

public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");//预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//执行

int retval =cmd.ExecuteNonQuery();//清除参数集,以便再次使用.

cmd.Parameters.Clear();returnretval;

}///

///执行带事务的SqlCommand(指定参数值).///

///

///此方法不提供访问存储过程输出参数和返回值///示例:///int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回受影响的行数

public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);

}

}#endregion ExecuteNonQuery方法结束

#region ExecuteDataset方法

///

///执行指定数据库连接字符串的命令,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(string connectionString, CommandType commandType, stringcommandText)

{return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接字符串的命令,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// SqlParamters参数数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");//创建并打开数据库连接对象,操作完成释放对象.

using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();//调用指定数据库连接字符串重载方法.

returnExecuteDataset(connection, commandType, commandText, commandParameters);

}

}///

///执行指定数据库连接字符串的命令,直接提供参数值,返回DataSet.///

///

///此方法不提供访问存储过程输出参数和返回值.///示例:///DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);///

/// 一个有效的数据库连接字符串

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中检索存储过程参数

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//给存储过程参数分配值

AssignParameterValues(commandParameters, parameterValues);returnExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteDataset(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库连接对象的命令,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, stringcommandText)

{return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// SqlParamter参数数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connection == null ) throw new ArgumentNullException( "connection");//预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, outmustCloseConnection );//创建SqlDataAdapter和DataSet.

using( SqlDataAdapter da = newSqlDataAdapter(cmd) )

{

DataSet ds= newDataSet();//填充DataSet.

da.Fill(ds);

cmd.Parameters.Clear();if( mustCloseConnection )

connection.Close();returnds;

}

}///

///执行指定数据库连接对象的命令,指定参数值,返回DataSet.///

///

///此方法不提供访问存储过程输入参数和返回值.///示例.:///DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");if ((parameterValues != null) && (parameterValues.Length > 0))

{//比缓存中加载存储过程参数

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//给存储过程参数分配值

AssignParameterValues(commandParameters, parameterValues);returnExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteDataset(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定事务的命令,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");///

/// 事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, stringcommandText)

{return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);

}///

///执行指定事务的命令,指定参数,返回DataSet.///

///

///示例:///DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// SqlParamter参数数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");//预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//创建 DataAdapter & DataSet

using( SqlDataAdapter da = newSqlDataAdapter(cmd) )

{

DataSet ds= newDataSet();

da.Fill(ds);

cmd.Parameters.Clear();returnds;

}

}///

///执行指定事务的命令,指定参数值,返回DataSet.///

///

///此方法不提供访问存储过程输入参数和返回值.///示例.:///DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);///

/// 事务

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回一个包含结果集的DataSet

public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//给存储过程参数分配值

AssignParameterValues(commandParameters, parameterValues);returnExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteDataset(transaction, CommandType.StoredProcedure, spName);

}

}#endregion ExecuteDataset数据集命令结束

#region ExecuteReader 数据阅读器

///

///枚举,标识数据库连接是由SqlHelper提供还是由调用者提供///

private enumSqlConnectionOwnership

{/// 由SqlHelper提供连接

Internal,/// 由调用者提供连接

External

}///

///执行指定数据库连接对象的数据阅读器.///

///

///如果是SqlHelper打开连接,当连接关闭DataReader也将关闭.///如果是调用都打开连接,DataReader由调用都管理.///

/// 一个有效的数据库连接对象

/// 一个有效的事务,或者为 'null'

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// SqlParameters参数数组,如果没有参数则为'null'

/// 标识数据库连接对象是由调用者提供还是由SqlHelper提供

/// 返回包含结果集的SqlDataReader

private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, stringcommandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)

{if( connection == null ) throw new ArgumentNullException( "connection");bool mustCloseConnection = false;//创建命令

SqlCommand cmd = newSqlCommand();try{

PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//创建数据阅读器

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 incmd.Parameters)

{if (commandParameter.Direction !=ParameterDirection.Input)

canClear= false;

}if(canClear)

{

cmd.Parameters.Clear();

}returndataReader;

}catch{if( mustCloseConnection )

connection.Close();throw;

}

}///

///执行指定数据库连接字符串的数据阅读器.///

///

///示例:///SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, stringcommandText)

{return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接字符串的数据阅读器,指定参数.///

///

///示例:///SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// SqlParamter参数数组(new SqlParameter("@prodid", 24))

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");

SqlConnection connection= null;try{

connection= newSqlConnection(connectionString);

connection.Open();return ExecuteReader(connection, null, commandType, commandText, commandParameters,SqlConnectionOwnership.Internal);

}catch{//If we fail to return the SqlDatReader, we need to close the connection ourselves

if( connection != null) connection.Close();throw;

}

}///

///执行指定数据库连接字符串的数据阅读器,指定参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///示例:///SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);///

/// 一个有效的数据库连接字符串

/// 存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");if ((parameterValues != null) && (parameterValues.Length > 0))

{

SqlParameter[] commandParameters=SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);

AssignParameterValues(commandParameters, parameterValues);returnExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteReader(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库连接对象的数据阅读器.///

///

///示例:///SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名或T-SQL语句

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, stringcommandText)

{return ExecuteReader(connection, commandType, commandText, (SqlParameter[])null);

}///

///[调用者方式]执行指定数据库连接对象的数据阅读器,指定参数.///

///

///示例:///SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 命令类型 (存储过程,命令文本或其它)

/// SqlParamter参数数组

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{return ExecuteReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters, SqlConnectionOwnership.External);

}///

///[调用者方式]执行指定数据库连接对象的数据阅读器,指定参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///示例:///SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);///

/// 一个有效的数据库连接对象

/// T存储过程名

/// 分配给存储过程输入参数的对象数组

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");if ((parameterValues != null) && (parameterValues.Length > 0))

{

SqlParameter[] commandParameters=SqlHelperParameterCache.GetSpParameterSet(connection, spName);

AssignParameterValues(commandParameters, parameterValues);returnExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnExecuteReader(connection, CommandType.StoredProcedure, spName);

}

}///

///[调用者方式]执行指定数据库事务的数据阅读器,指定参数值.///

///

///示例:///SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, stringcommandText)

{return ExecuteReader(transaction, commandType, commandText, (SqlParameter[])null);

}///

///[调用者方式]执行指定数据库事务的数据阅读器,指定参数.///

///

///示例:///SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 分配给命令的SqlParamter参数数组

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");returnExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, SqlConnectionOwnership.External);

}///

///[调用者方式]执行指定数据库事务的数据阅读器,指定参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);///

/// 一个有效的连接事务

/// 存储过程名称

/// 分配给存储过程输入参数的对象数组

/// 返回包含结果集的SqlDataReader

public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{

SqlParameter[] commandParameters=SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);

AssignParameterValues(commandParameters, parameterValues);returnExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteReader(transaction, CommandType.StoredProcedure, spName);

}

}#endregion ExecuteReader数据阅读器

#region ExecuteScalar 返回结果集中的第一行第一列

///

///执行指定数据库连接字符串的命令,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(string connectionString, CommandType commandType, stringcommandText)

{//执行参数为空的方法

return ExecuteScalar(connectionString, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接字符串的命令,指定参数,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 分配给命令的SqlParamter参数数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");//创建并打开数据库连接对象,操作完成释放对象.

using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();//调用指定数据库连接字符串重载方法.

returnExecuteScalar(connection, commandType, commandText, commandParameters);

}

}///

///执行指定数据库连接字符串的命令,指定参数值,返回结果集中的第一行第一列.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 分配给存储过程输入参数的对象数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteScalar(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库连接对象的命令,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlConnection connection, CommandType commandType, stringcommandText)

{//执行参数为空的方法

return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 分配给命令的SqlParamter参数数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connection == null ) throw new ArgumentNullException( "connection");//创建SqlCommand命令,并进行预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, outmustCloseConnection );//执行SqlCommand命令,并返回结果.

object retval =cmd.ExecuteScalar();//清除参数,以便再次使用.

cmd.Parameters.Clear();if( mustCloseConnection )

connection.Close();returnretval;

}///

///执行指定数据库连接对象的命令,指定参数值,返回结果集中的第一行第一列.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 分配给存储过程输入参数的对象数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteScalar(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库事务的命令,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, stringcommandText)

{//执行参数为空的方法

return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库事务的命令,指定参数,返回结果集中的第一行第一列.///

///

///示例:///int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 分配给命令的SqlParamter参数数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");//创建SqlCommand命令,并进行预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//执行SqlCommand命令,并返回结果.

object retval =cmd.ExecuteScalar();//清除参数,以便再次使用.

cmd.Parameters.Clear();returnretval;

}///

///执行指定数据库事务的命令,指定参数值,返回结果集中的第一行第一列.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);///

/// 一个有效的连接事务

/// 存储过程名称

/// 分配给存储过程输入参数的对象数组

/// 返回结果集中的第一行第一列

public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//PPull the parameters for this stored procedure from the parameter cache ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteScalar(transaction, CommandType.StoredProcedure, spName);

}

}#endregion ExecuteScalar

#region ExecuteXmlReader XML阅读器

///

///执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回.///

///

///示例:///XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句 using "FOR XML AUTO"

/// 返回XmlReader结果集对象.

public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, stringcommandText)

{//执行参数为空的方法

return ExecuteXmlReader(connection, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数.///

///

///示例:///XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句 using "FOR XML AUTO"

/// 分配给命令的SqlParamter参数数组

/// 返回XmlReader结果集对象.

public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( connection == null ) throw new ArgumentNullException( "connection");bool mustCloseConnection = false;//创建SqlCommand命令,并进行预处理

SqlCommand cmd = newSqlCommand();try{

PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, outmustCloseConnection );//执行命令

XmlReader retval =cmd.ExecuteXmlReader();//清除参数,以便再次使用.

cmd.Parameters.Clear();returnretval;

}catch{if( mustCloseConnection )

connection.Close();throw;

}

}///

///执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///XmlReader r = ExecuteXmlReader(conn, "GetOrders", 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名称 using "FOR XML AUTO"

/// 分配给存储过程输入参数的对象数组

/// 返回XmlReader结果集对象.

public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteXmlReader(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回.///

///

///示例:///XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders");///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句 using "FOR XML AUTO"

/// 返回XmlReader结果集对象.

public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, stringcommandText)

{//执行参数为空的方法

return ExecuteXmlReader(transaction, commandType, commandText, (SqlParameter[])null);

}///

///执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数.///

///

///示例:///XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句 using "FOR XML AUTO"

/// 分配给命令的SqlParamter参数数组

/// 返回XmlReader结果集对象.

public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText, paramsSqlParameter[] commandParameters)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");//创建SqlCommand命令,并进行预处理

SqlCommand cmd = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//执行命令

XmlReader retval =cmd.ExecuteXmlReader();//清除参数,以便再次使用.

cmd.Parameters.Clear();returnretval;

}///

///执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///XmlReader r = ExecuteXmlReader(trans, "GetOrders", 24, 36);///

/// 一个有效的连接事务

/// 存储过程名称

/// 分配给存储过程输入参数的对象数组

/// 返回一个包含结果集的DataSet.

public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

returnExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{//没有参数值

returnExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);

}

}#endregion ExecuteXmlReader 阅读器结束

#region FillDataset 填充数据集

///

///执行指定数据库连接字符串的命令,映射数据表并填充数据集.///

///

///示例:///FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)

public static void FillDataset(string connectionString, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( dataSet == null ) throw new ArgumentNullException( "dataSet");//创建并打开数据库连接对象,操作完成释放对象.

using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();//调用指定数据库连接字符串重载方法.

FillDataset(connection, commandType, commandText, dataSet, tableNames);

}

}///

///执行指定数据库连接字符串的命令,映射数据表并填充数据集.指定命令参数.///

///

///示例:///FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接字符串

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 分配给命令的SqlParamter参数数组

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

public static void FillDataset(stringconnectionString, CommandType commandType,string commandText, DataSet dataSet, string[] tableNames,paramsSqlParameter[] commandParameters)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( dataSet == null ) throw new ArgumentNullException( "dataSet");//创建并打开数据库连接对象,操作完成释放对象.

using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();//调用指定数据库连接字符串重载方法.

FillDataset(connection, commandType, commandText, dataSet, tableNames, commandParameters);

}

}///

///执行指定数据库连接字符串的命令,映射数据表并填充数据集,指定存储过程参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, 24);///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给存储过程输入参数的对象数组

public static void FillDataset(string connectionString, stringspName,

DataSet dataSet,string[] tableNames,params object[] parameterValues)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( dataSet == null ) throw new ArgumentNullException( "dataSet");//创建并打开数据库连接对象,操作完成释放对象.

using (SqlConnection connection = newSqlConnection(connectionString))

{

connection.Open();//调用指定数据库连接字符串重载方法.

FillDataset (connection, spName, dataSet, tableNames, parameterValues);

}

}///

///执行指定数据库连接对象的命令,映射数据表并填充数据集.///

///

///示例:///FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

public static voidFillDataset(SqlConnection connection, CommandType commandType,string commandText, DataSet dataSet, string[] tableNames)

{

FillDataset(connection, commandType, commandText, dataSet, tableNames,null);

}///

///执行指定数据库连接对象的命令,映射数据表并填充数据集,指定参数.///

///

///示例:///FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给命令的SqlParamter参数数组

public static voidFillDataset(SqlConnection connection, CommandType commandType,string commandText, DataSet dataSet, string[] tableNames,paramsSqlParameter[] commandParameters)

{

FillDataset(connection,null, commandType, commandText, dataSet, tableNames, commandParameters);

}///

///执行指定数据库连接对象的命令,映射数据表并填充数据集,指定存储过程参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///FillDataset(conn, "GetOrders", ds, new string[] {"orders"}, 24, 36);///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给存储过程输入参数的对象数组

public static void FillDataset(SqlConnection connection, stringspName,

DataSet dataSet,string[] tableNames,params object[] parameterValues)

{if ( connection == null ) throw new ArgumentNullException( "connection");if (dataSet == null ) throw new ArgumentNullException( "dataSet");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);

}else{//没有参数值

FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames);

}

}///

///执行指定数据库事务的命令,映射数据表并填充数据集.///

///

///示例:///FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

public static voidFillDataset(SqlTransaction transaction, CommandType commandType,stringcommandText,

DataSet dataSet,string[] tableNames)

{

FillDataset (transaction, commandType, commandText, dataSet, tableNames,null);

}///

///执行指定数据库事务的命令,映射数据表并填充数据集,指定参数.///

///

///示例:///FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));///

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给命令的SqlParamter参数数组

public static voidFillDataset(SqlTransaction transaction, CommandType commandType,string commandText, DataSet dataSet, string[] tableNames,paramsSqlParameter[] commandParameters)

{

FillDataset(transaction.Connection, transaction, commandType, commandText, dataSet, tableNames, commandParameters);

}///

///执行指定数据库事务的命令,映射数据表并填充数据集,指定存储过程参数值.///

///

///此方法不提供访问存储过程输出参数和返回值参数.///

///示例:///FillDataset(trans, "GetOrders", ds, new string[]{"orders"}, 24, 36);///

/// 一个有效的连接事务

/// 存储过程名称

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给存储过程输入参数的对象数组

public static void FillDataset(SqlTransaction transaction, stringspName,

DataSet dataSet,string[] tableNames,params object[] parameterValues)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( dataSet == null ) throw new ArgumentNullException( "dataSet");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果有参数值

if ((parameterValues != null) && (parameterValues.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//给存储过程参数赋值

AssignParameterValues(commandParameters, parameterValues);//调用重载方法

FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);

}else{//没有参数值

FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames);

}

}///

///[私有方法][内部调用]执行指定数据库连接对象/事务的命令,映射数据表并填充数据集,DataSet/TableNames/SqlParameters.///

///

///示例:///FillDataset(conn, trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));///

/// 一个有效的数据库连接对象

/// 一个有效的连接事务

/// 命令类型 (存储过程,命令文本或其它)

/// 存储过程名称或T-SQL语句

/// 要填充结果集的DataSet实例

/// 表映射的数据表数组///用户定义的表名 (可有是实际的表名.)///

/// 分配给命令的SqlParamter参数数组

private static voidFillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,string commandText, DataSet dataSet, string[] tableNames,paramsSqlParameter[] commandParameters)

{if( connection == null ) throw new ArgumentNullException( "connection");if( dataSet == null ) throw new ArgumentNullException( "dataSet");//创建SqlCommand命令,并进行预处理

SqlCommand command = newSqlCommand();bool mustCloseConnection = false;

PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters,outmustCloseConnection );//执行命令

using( SqlDataAdapter dataAdapter = newSqlDataAdapter(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 更新数据集

///

///执行数据集更新到数据库,指定inserted, updated, or deleted命令.///

///

///示例:///UpdateDataset(conn, insertCommand, deleteCommand, updateCommand, dataSet, "Order");///

/// [追加记录]一个有效的T-SQL语句或存储过程

/// [删除记录]一个有效的T-SQL语句或存储过程

/// [更新记录]一个有效的T-SQL语句或存储过程

/// 要更新到数据库的DataSet

/// 要更新到数据库的DataTable

public static void UpdateDataset(SqlCommand insertCommand, SqlCommand deleteCommand, SqlCommand updateCommand, DataSet dataSet, stringtableName)

{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 = newSqlDataAdapter())

{//设置数据适配器命令

dataAdapter.UpdateCommand =updateCommand;

dataAdapter.InsertCommand=insertCommand;

dataAdapter.DeleteCommand=deleteCommand;//更新数据集改变到数据库

dataAdapter.Update (dataSet, tableName);//提交所有改变到数据集.

dataSet.AcceptChanges();

}

}#endregion

#region CreateCommand 创建一条SqlCommand命令

///

///创建SqlCommand命令,指定数据库连接对象,存储过程名和参数.///

///

///示例:///SqlCommand command = CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 源表的列名称数组

/// 返回SqlCommand命令

public static SqlCommand CreateCommand(SqlConnection connection, string spName, params string[] sourceColumns)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//创建命令

SqlCommand cmd = newSqlCommand( spName, connection );

cmd.CommandType=CommandType.StoredProcedure;//如果有参数值

if ((sourceColumns != null) && (sourceColumns.Length > 0))

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//将源表的列到映射到DataSet命令中.

for (int index=0; index < sourceColumns.Length; index++)

commandParameters[index].SourceColumn=sourceColumns[index];//Attach the discovered parameters to the SqlCommand object

AttachParameters (cmd, commandParameters);

}returncmd;

}#endregion

#region ExecuteNonQueryTypedParams 类型化参数(DataRow)

///

///执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回受影响的行数.///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回影响的行数

public static intExecuteNonQueryTypedParams(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)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回受影响的行数.///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回影响的行数

public static intExecuteNonQueryTypedParams(SqlConnection connection, String spName, DataRow dataRow)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if (dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库事物的存储过程,使用DataRow做为参数值,返回受影响的行数.///

/// 一个有效的连接事务 object

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回影响的行数

public static intExecuteNonQueryTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//Sf the row has values, the store procedure parameters must be initialized

if (dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);

}

}#endregion

#region ExecuteDatasetTypedParams 类型化参数(DataRow)

///

///执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataSet.///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回一个包含结果集的DataSet.

public static DataSet ExecuteDatasetTypedParams(stringconnectionString, 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)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回DataSet.///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回一个包含结果集的DataSet.

///

public staticDataSet ExecuteDatasetTypedParams(SqlConnection connection, String spName, DataRow dataRow)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回DataSet.///

/// 一个有效的连接事务 object

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回一个包含结果集的DataSet.

public staticDataSet ExecuteDatasetTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName);

}

}#endregion

#region ExecuteReaderTypedParams 类型化参数(DataRow)

///

///执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataReader.///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回包含结果集的SqlDataReader

public staticSqlDataReader ExecuteReaderTypedParams(String connectionString, String spName, DataRow dataRow)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if ( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回DataReader.///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回包含结果集的SqlDataReader

public staticSqlDataReader ExecuteReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库事物的存储过程,使用DataRow做为参数值,返回DataReader.///

/// 一个有效的连接事务 object

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回包含结果集的SqlDataReader

public staticSqlDataReader ExecuteReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName);

}

}#endregion

#region ExecuteScalarTypedParams 类型化参数(DataRow)

///

///执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.///

/// 一个有效的数据库连接字符串

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回结果集中的第一行第一列

public static objectExecuteScalarTypedParams(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)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回结果集中的第一行第一列

public static objectExecuteScalarTypedParams(SqlConnection connection, String spName, DataRow dataRow)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.///

/// 一个有效的连接事务 object

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回结果集中的第一行第一列

public static objectExecuteScalarTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName);

}

}#endregion

#region ExecuteXmlReaderTypedParams 类型化参数(DataRow)

///

///执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回XmlReader类型的结果集.///

/// 一个有效的数据库连接对象

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回XmlReader结果集对象.

public staticXmlReader ExecuteXmlReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);

}

}///

///执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回XmlReader类型的结果集.///

/// 一个有效的连接事务 object

/// 存储过程名称

/// 使用DataRow作为参数值

/// 返回XmlReader结果集对象.

public staticXmlReader ExecuteXmlReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)

{if( transaction == null ) throw new ArgumentNullException( "transaction");if( transaction != null && transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");//如果row有值,存储过程必须初始化.

if( dataRow != null && dataRow.ItemArray.Length > 0)

{//从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()

SqlParameter[] commandParameters =SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);//分配参数值

AssignParameterValues(commandParameters, dataRow);returnSqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);

}else{returnSqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);

}

}#endregion}///

///SqlHelperParameterCache提供缓存存储过程参数,并能够在运行时从存储过程中探索参数.///

public sealed classSqlHelperParameterCache

{#region 私有方法,字段,构造函数

//私有构造函数,妨止类被实例化.

privateSqlHelperParameterCache() {}//这个方法要注意

private static Hashtable paramCache = Hashtable.Synchronized(newHashtable());///

///探索运行时的存储过程,返回SqlParameter参数数组.///初始化参数值为 DBNull.Value.///

/// 一个有效的数据库连接

/// 存储过程名称

/// 是否包含返回值参数

/// 返回SqlParameter参数数组

private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, boolincludeReturnValueParameter)

{if( connection == null ) throw new ArgumentNullException( "connection");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");

SqlCommand cmd= newSqlCommand(spName, connection);

cmd.CommandType=CommandType.StoredProcedure;

connection.Open();//检索cmd指定的存储过程的参数信息,并填充到cmd的Parameters参数集中.

SqlCommandBuilder.DeriveParameters(cmd);

connection.Close();//如果不包含返回值参数,将参数集中的每一个参数删除.

if (!includeReturnValueParameter)

{

cmd.Parameters.RemoveAt(0);

}//创建参数数组

SqlParameter[] discoveredParameters = newSqlParameter[cmd.Parameters.Count];//将cmd的Parameters参数集复制到discoveredParameters数组.

cmd.Parameters.CopyTo(discoveredParameters, 0);//初始化参数值为 DBNull.Value.

foreach (SqlParameter discoveredParameter indiscoveredParameters)

{

discoveredParameter.Value=DBNull.Value;

}returndiscoveredParameters;

}///

///SqlParameter参数数组的深层拷贝.///

/// 原始参数数组

/// 返回一个同样的参数数组

private staticSqlParameter[] CloneParameters(SqlParameter[] originalParameters)

{

SqlParameter[] clonedParameters= newSqlParameter[originalParameters.Length];for (int i = 0, j = originalParameters.Length; i < j; i++)

{

clonedParameters[i]=(SqlParameter)((ICloneable)originalParameters[i]).Clone();

}returnclonedParameters;

}#endregion 私有方法,字段,构造函数结束

#region 缓存方法

///

///追加参数数组到缓存.///

/// 一个有效的数据库连接字符串

/// 存储过程名或SQL语句

/// 要缓存的参数数组

public static void CacheParameterSet(string connectionString, string commandText, paramsSqlParameter[] 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;

}///

///从缓存中获取参数数组.///

/// 一个有效的数据库连接字符

/// 存储过程名或SQL语句

/// 参数数组

public static SqlParameter[] GetCachedParameterSet(string connectionString, stringcommandText)

{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] asSqlParameter[];if (cachedParameters == null)

{return null;

}else{returnCloneParameters(cachedParameters);

}

}#endregion 缓存方法结束

#region 检索指定的存储过程的参数集

///

///返回指定的存储过程的参数集///

///

///这个方法将查询数据库,并将信息存储到缓存.///

/// 一个有效的数据库连接字符

/// 存储过程名

/// 返回SqlParameter参数数组

public static SqlParameter[] GetSpParameterSet(string connectionString, stringspName)

{return GetSpParameterSet(connectionString, spName, false);

}///

///返回指定的存储过程的参数集///

///

///这个方法将查询数据库,并将信息存储到缓存.///

/// 一个有效的数据库连接字符.

/// 存储过程名

/// 是否包含返回值参数

/// 返回SqlParameter参数数组

public static SqlParameter[] GetSpParameterSet(string connectionString, string spName, boolincludeReturnValueParameter)

{if( connectionString == null || connectionString.Length == 0 ) throw new ArgumentNullException( "connectionString");if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName");using(SqlConnection connection = newSqlConnection(connectionString))

{returnGetSpParameterSetInternal(connection, spName, includeReturnValueParameter);

}

}///

///[内部]返回指定的存储过程的参数集(使用连接对象).///

///

///这个方法将查询数据库,并将信息存储到缓存.///

/// 一个有效的数据库连接字符

/// 存储过程名

/// 返回SqlParameter参数数组

internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, stringspName)

{return GetSpParameterSet(connection, spName, false);

}///

///[内部]返回指定的存储过程的参数集(使用连接对象)///

///

///这个方法将查询数据库,并将信息存储到缓存.///

/// 一个有效的数据库连接对象

/// 存储过程名

///

///是否包含返回值参数///

/// 返回SqlParameter参数数组

internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName, boolincludeReturnValueParameter)

{if( connection == null ) throw new ArgumentNullException( "connection");using (SqlConnection clonedConnection =(SqlConnection)((ICloneable)connection).Clone())

{returnGetSpParameterSetInternal(clonedConnection, spName, includeReturnValueParameter);

}

}///

///[私有]返回指定的存储过程的参数集(使用连接对象)///

/// 一个有效的数据库连接对象

/// 存储过程名

/// 是否包含返回值参数

/// 返回SqlParameter参数数组

private static SqlParameter[] GetSpParameterSetInternal(SqlConnection connection, string spName, boolincludeReturnValueParameter)

{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] asSqlParameter[];if (cachedParameters == null)

{

SqlParameter[] spParameters=DiscoverSpParameterSet(connection, spName, includeReturnValueParameter);

paramCache[hashKey]=spParameters;

cachedParameters=spParameters;

}returnCloneParameters(cachedParameters);

}#endregion 参数集检索结束}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLHelper 是一个常用的数据库操作,用于简化在应用程序中执行 SQL 查询和更新的过程。它通常用于与关系型数据库(如 MySQL、Oracle、SQL Server 等)进行交互。SQLHelper 提供了一些常用的方法,如执行查询语句、执行更新语句、执行存储过程等。 下面是一个简单的示例代码,演示了如何使用 SQLHelper 进行数据库操作: ```python import mysql.connector class SQLHelper: def __init__(self, host, user, password, database): self.host = host self.user = user self.password = password self.database = database self.connection = None self.cursor = None def connect(self): self.connection = mysql.connector.connect( host=self.host, user=self.user, password=self.password, database=self.database ) self.cursor = self.connection.cursor() def disconnect(self): if self.connection.is_connected(): self.cursor.close() self.connection.close() def execute_query(self, query): self.cursor.execute(query) result = self.cursor.fetchall() return result def execute_update(self, query): self.cursor.execute(query) self.connection.commit() # 示例用法: helper = SQLHelper('localhost', 'root', 'password', 'mydatabase') helper.connect() # 执行查询语句 result = helper.execute_query('SELECT * FROM users') for row in result: print(row) # 执行更新语句 helper.execute_update('UPDATE users SET age = 30 WHERE id = 1') helper.disconnect() ``` 以上示例代码使用了 `mysql.connector` 模块来连接 MySQL 数据库,你可以根据自己的需求选择适合的数据库连接模块。在实际使用中,你需要根据具体的数据库和表结构来编写 SQL 查询和更新语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值