微软的SQLHelper类免费共享.docx

上传人:牧羊曲112 文档编号:3514375 上传时间:2023-03-13 格式:DOCX 页数:134 大小:52.80KB
返回 下载 相关 举报
微软的SQLHelper类免费共享.docx_第1页
第1页 / 共134页
微软的SQLHelper类免费共享.docx_第2页
第2页 / 共134页
微软的SQLHelper类免费共享.docx_第3页
第3页 / 共134页
微软的SQLHelper类免费共享.docx_第4页
第4页 / 共134页
微软的SQLHelper类免费共享.docx_第5页
第5页 / 共134页
亲,该文档总共134页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《微软的SQLHelper类免费共享.docx》由会员分享,可在线阅读,更多相关《微软的SQLHelper类免费共享.docx(134页珍藏版)》请在三一办公上搜索。

1、微软的SQLHelper类免费共享/没必要定个20分,要那么多干嘛用啊!本文档20分下载免费共享给大家。using System;using System.Data;using System.Xml;using System.Data.SqlClient;using System.Collections;namespace Book.DAL/ <summary>/ SqlServer数据访问帮助类/ </summary>public sealed class SqlHelper#region 私有构造函数和方法private SqlHelper / <summary>/

2、 将SqlParameter参数数组(参数值)分配给SqlCommand命令./ 这个方法将给任何一个参数分配DBNull.Value;/ 该操作将阻止默认值的使用./ </summary>/ <param>命令名</param>/ <param>SqlParameters数组</param>private static void AttachParameters(SqlCommand command, SqlParameter commandParameters)if( command = null ) throw new ArgumentNullEx

3、ception( 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

4、(p);/ <summary>/ 将DataRow类型的列值分配到SqlParameter参数数组./ </summary>/ <param>要分配值的SqlParameter参数数组</param>/ <param>将要分配给存储过程参数的DataRow</param>private static void AssignParameterValues(SqlParameter commandParameters, DataRow dataRow)if (commandParameters = null) | (dataRow = null) r

5、eturn;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的表中获取

6、为参数数组中数组名称的列的索引./ 如果存在和参数名称相同的列,则将列值赋给当前名称的参数.if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1) != -1)commandParameter.Value = dataRowcommandParameter.ParameterName.Substring(1);i+;/ <summary>/ 将一个对象数组分配给SqlParameter参数数组./ </summary>/ <param>要分配值的SqlParameter参

7、数数组</param>/ <param>将要分配给存储过程参数的对象数组</param>private static void AssignParameterValues(SqlParameter commandParameters, object parameterValues)if (commandParameters = null) | (parameterValues = null) return;/ 确保对象数组个数与参数个数匹配,如果不匹配,抛出一个异常.if (commandParameters.Length != parameterValues.Leng

8、th)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 propertyif (parameterValuesi is IDbDataParameter)IDbDataParameter paramInstance = (IDbDataParameter)paramete

9、rValuesi;if( paramInstance.Value = null )commandParametersi.Value = DBNull.Value; elsecommandParametersi.Value = paramInstance.Value;else if (parameterValuesi = null)commandParametersi.Value = DBNull.Value;elsecommandParametersi.Value = parameterValuesi;/ <summary>/ 预处理用户提供的命令,数据库连接/事务/命令类型/参数/

10、</summary>/ <param>要处理的SqlCommand</param>/ <param>数据库连接</param>/ <param>一个有效的事务或者是null值</param>/ <param>命令类型 (存储过程,命令文本, 其它.)</param>/ <param>存储过程名或都T-SQL命令文本</param>/ <param>和命令相关联的SqlParameter参数数组,如果没有参数为null</param>/ <param><c>true</c&

11、gt 如果连接是打开的,则为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 ArgumentNu

12、llException( command );if( commandText = null | commandText.Length = 0 ) throw new ArgumentNullException( commandText );/ If the provided connection is not open, we will open itif (connection.State != ConnectionState.Open)mustCloseConnection = true;connection.Open;elsemustCloseConnection = false;/ 给

13、命令分配一个数据库连接.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.Tra

14、nsaction = transaction;/ 设置命令类型.command.CommandType = commandType;/ 分配命令参数if (commandParameters != null)AttachParameters(command, commandParameters);return;#endregion 私有构造函数和方法结束#region ExecuteNonQuery命令/ <summary>/ 执行指定连接字符串,类型的SqlCommand./ </summary>/ <remarks>/ 示例: / int result = Exec

15、uteNonQuery(connString, CommandType.StoredProcedure, PublishOrders);/ </remarks>/ <param>一个有效的数据库连接字符串</param>/ <param>命令类型 (存储过程,命令文本, 其它.)</param>/ <param>存储过程名称或SQL语句</param>/ <returns>返回命令影响的行数</returns>public static int ExecuteNonQuery(string connectionString

16、, CommandType commandType, string commandText)return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter)null);/ <summary>/ 执行指定连接字符串,类型的SqlCommand.如果没有提供参数,不返回结果./ </summary>/ <remarks>/ 示例: / int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, Pu

17、blishOrders, new SqlParameter(prodid, 24);/ </remarks>/ <param>一个有效的数据库连接字符串</param>/ <param>命令类型 (存储过程,命令文本, 其它.)</param>/ <param>存储过程名称或SQL语句</param>/ <param>SqlParameter参数数组</param>/ <returns>返回命令影响的行数</returns>public static int ExecuteNonQuery(string c

18、onnectionString, CommandType commandType, string commandText, params SqlParameter commandParameters)if( connectionString = null | connectionString.Length = 0 ) throw new ArgumentNullException( connectionString );using (SqlConnection connection = new SqlConnection(connectionString)connection.Open;ret

19、urn ExecuteNonQuery(connection, commandType, commandText, commandParameters);/ <summary>/ 执行指定连接字符串的存储过程,将对象数组的值赋给存储过程参数,/ 此方法需要在参数缓存方法中探索参数并生成参数./ </summary>/ <remarks>/ 这个方法没有提供访问输出参数和返回值./ 示例: / int result = ExecuteNonQuery(connString, PublishOrders, 24, 36);/ </remarks>/ <param

20、>一个有效的数据库连接字符串/param>/ <param>存储过程名称</param>/ <param>分配到存储过程输入参数的对象数组</param>/ <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, string spName, params object parameterValues)if( connectionString = null | connectionString.Length = 0 ) th

21、row new ArgumentNullException( connectionString );if( spName = null | spName.Length = 0 ) throw new ArgumentNullException( spName );/ 如果存在参数值if (parameterValues != null) & (parameterValues.Length > 0) / 从探索存储过程参数(加载到缓存)并分配给存储过程参数数组.SqlParameter commandParameters = SqlHelperParameterCache.GetSpPara

22、meterSet(connectionString, spName);/ 给存储过程参数赋值AssignParameterValues(commandParameters, parameterValues);return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);else / 没有参数情况下return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);/ <su

23、mmary>/ 执行指定数据库连接对象的命令 / </summary>/ <remarks>/ 示例: / int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, PublishOrders);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>命令类型(存储过程,命令文本或其它.)</param>/ <param>存储过程名称或T-SQL语句</param>/ <returns>返回影响的行

24、数</returns>public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter)null);/ <summary>/ 执行指定数据库连接对象的命令/ </summary>/ <remarks>/ 示例: / int result = ExecuteNonQuery(c

25、onn, CommandType.StoredProcedure, PublishOrders, new SqlParameter(prodid, 24);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>命令类型(存储过程,命令文本或其它.)</param>/ <param>T存储过程名称或T-SQL语句</param>/ <param>SqlParamter参数数组</param>/ <returns>返回影响的行数</returns>public st

26、atic int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter commandParameters) if( connection = null ) throw new ArgumentNullException( connection );/ 创建SqlCommand命令,并进行预处理SqlCommand cmd = new SqlCommand;bool mustCloseConnection = false;Prepare

27、Command(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection );/ Finally, execute the commandint retval = cmd.ExecuteNonQuery;/ 清除参数,以便再次使用.cmd.Parameters.Clear;if( mustCloseConnection )connection.Close;return retval;/ <summary>/ 执行指定数据库连接对象

28、的命令,将对象数组的值赋给存储过程参数./ </summary>/ <remarks>/ 此方法不提供访问存储过程输出参数和返回值/ 示例: / int result = ExecuteNonQuery(conn, PublishOrders, 24, 36);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>存储过程名</param>/ <param>分配给存储过程输入参数的对象数组</param>/ <returns>返回影响的行数</returns>p

29、ublic 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) & (param

30、eterValues.Length > 0) / 从缓存中加载存储过程参数SqlParameter commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);/ 给存储过程分配参数值AssignParameterValues(commandParameters, parameterValues);return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);else

31、return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);/ <summary>/ 执行带事务的SqlCommand./ </summary>/ <remarks>/ 示例.: / int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, PublishOrders);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>命令类型(存储过

32、程,命令文本或其它.)</param>/ <param>存储过程名称或T-SQL语句</param>/ <returns>返回影响的行数/returns>public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText)return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter)null);/ <summary>/

33、执行带事务的SqlCommand(指定参数)./ </summary>/ <remarks>/ 示例: / int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, GetOrders, new SqlParameter(prodid, 24);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>命令类型(存储过程,命令文本或其它.)</param>/ <param>存储过程名称或T-SQL语句</param

34、>/ <param>SqlParamter参数数组</param>/ <returns>返回影响的行数</returns>public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter commandParameters)if( transaction = null ) throw new ArgumentNullException( transaction );if(

35、transaction != null & transaction.Connection = null ) throw new ArgumentException( The transaction was rollbacked or commited, please provide an open transaction., transaction );/ 预处理SqlCommand cmd = new SqlCommand;bool mustCloseConnection = false;PrepareCommand(cmd, transaction.Connection, transact

36、ion, commandType, commandText, commandParameters, out mustCloseConnection );/ 执行int retval = cmd.ExecuteNonQuery;/ 清除参数集,以便再次使用.cmd.Parameters.Clear;return retval;/ <summary>/ 执行带事务的SqlCommand(指定参数值)./ </summary>/ <remarks>/ 此方法不提供访问存储过程输出参数和返回值/ 示例: / int result = ExecuteNonQuery(conn,

37、trans, PublishOrders, 24, 36);/ </remarks>/ <param>一个有效的数据库连接对象</param>/ <param>存储过程名</param>/ <param>分配给存储过程输入参数的对象数组</param>/ <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object parameterValues)if

38、( 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 ne

39、w ArgumentNullException( spName );/ 如果有参数值if (parameterValues != null) & (parameterValues.Length > 0) / 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. SqlParameter commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);/ 给存储过程参数赋值AssignParameterValues(commandParam

40、eters, parameterValues);/ 调用重载方法return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);else / 没有参数值return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);#endregion ExecuteNonQuery方法结束#region ExecuteDataset方法/ <summary>/ 执行指定数据库连接字符串的命令,返回Da

41、taSet./ </summary>/ <remarks>/ 示例: / DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, GetOrders);/ </remarks>/ <param>一个有效的数据库连接字符串</param>/ <param>命令类型 (存储过程,命令文本或其它)</param>/ <param>存储过程名称或T-SQL语句</param>/ <returns>返回一个包含结果集的DataSet</re

42、turns>public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter)null);/ <summary>/ 执行指定数据库连接字符串的命令,返回DataSet./ </summary>/ <remarks>/ 示例: / DataSet ds = Execu

43、teDataset(connString, CommandType.StoredProcedure, GetOrders, new SqlParameter(prodid, 24);/ </remarks>/ <param>一个有效的数据库连接字符串</param>/ <param>命令类型 (存储过程,命令文本或其它)</param>/ <param>存储过程名称或T-SQL语句</param>/ <param>SqlParamters参数数组</param>/ <returns>返回一个包含结果集的DataSe

44、t</returns>public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter commandParameters)if( connectionString = null | connectionString.Length = 0 ) throw new ArgumentNullException( connectionString );/ 创建并打开数据库连接对象,操作完成释放对象.using (SqlConnection connection = new SqlConnection(connectionString)connection.Open;/ 调用指定数据库连接字符串重载方法.return ExecuteDataset(connection, commandType, commandText, commandParameters);/ <summary>/ 执行指定数据库连接字符串的命令,直接提供参数值,返回DataSet./ </summary>/ <remarks>/ 此方法不提供访问存储过程输出参数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号