1. CREATE PROCEDURE [dbo].[RecordFromPage]
  2. @SelectList VARCHAR(max),
  3. @TableSource VARCHAR(100),
  4. @SearchCondition VARCHAR(max),
  5. @OrderExpression VARCHAR(1000),
  6. @PageIndex INT = 1,
  7. @PageSize INT = 10,
  8. @TotalCount int output
  9. AS
  10. BEGIN
  11. IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList)) = ''
  12. BEGIN
  13. SET @SelectList = '*'
  14. END
  15. PRINT @SelectList
  16.  
  17. SET @SearchCondition = ISNULL(@SearchCondition,'')
  18. SET @SearchCondition = LTRIM(RTRIM(@SearchCondition))
  19. IF @SearchCondition <> ''
  20. BEGIN
  21. IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE'
  22. BEGIN
  23. SET @SearchCondition = 'WHERE ' + @SearchCondition
  24. END
  25. END
  26. PRINT @SearchCondition
  27.  
  28. SET @OrderExpression = ISNULL(@OrderExpression,'')
  29. SET @OrderExpression = LTRIM(RTRIM(@OrderExpression))
  30. IF @OrderExpression <> ''
  31. BEGIN
  32. IF UPPER(SUBSTRING(@OrderExpression,1,5)) <> 'WHERE'
  33. BEGIN
  34. SET @OrderExpression = 'ORDER BY ' + @OrderExpression
  35. END
  36. END
  37. PRINT @OrderExpression
  38.  
  39. IF @PageIndex IS NULL OR @PageIndex < 1
  40. BEGIN
  41. SET @PageIndex = 1
  42. END
  43. PRINT @PageIndex
  44. IF @PageSize IS NULL OR @PageSize < 1
  45. BEGIN
  46. SET @PageSize = 10
  47. END
  48. PRINT @PageSize
  49.  
  50. DECLARE @Total int
  51. DECLARE @Sql nVarchar(max)
  52. SET @Sql=(N'SELECT @Total=Count(*) FROM ' + @TableSource +' '+ @SearchCondition)
  53. print @sql
  54. Exec sp_executesql @Sql, N'@Total Int Out',@Total Out
  55. set @TotalCount=@Total
  56. DECLARE @SqlQuery VARCHAR(max)
  57.  
  58. SET @SqlQuery='SELECT '+@SelectList+',RowNumber
  59. FROM
  60. (SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
  61. FROM '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
  62. WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
  63. + ' AND ' +
  64. CAST((@PageIndex * @PageSize) AS VARCHAR)
  65. -- ORDER BY ' + @OrderExpression
  66. PRINT @SqlQuery
  67. SET NOCOUNT ON
  68. EXECUTE(@SqlQuery)
  69. SET NOCOUNT OFF
  70.  
  71. END

  

  1. /// <summary>
  2. /// 查询接口
  3. /// </summary>
  4. public interface IQuery
  5. {
  6. string Column { get; set; } //列名
  7. string TableName { get; set; } //表名
  8. string OrderBy { get; set; } //查询的"OrderBy"语句,不包含OrderBy,例子:ID DESC
  9. string BulidQuery(); //查询的"where"语句
  10. string BulidSelect(string where, string tableName = ""); //查语句
  11. }
  12.  
  1. /// <summary>
  2. /// 分页实现简单查询
  3. /// </summary>
  4. public class CommonPageSql
  5. {
  6.  
  7. /// <summary>
  8. /// 分页获取数据列表 适用于SQL2005和SQL2008
  9. /// </summary>
  10. /// <param name="con">数据库连接字符串</param>
  11. /// <param name="pageindex">页索引 从0开始</param>
  12. /// <param name="pagesize">每页记录数</param>
  13. /// <param name="query">查询接口</param>
  14. /// <param name="p">输出参数</param>
  15. /// <returns>DataRead数据集</returns>
  16. public static IDataReader GetDataReaderByPager(string con, int pageindex, int pagesize, IQuery query, out SqlParameter p)
  17. {
  18. string cmd = "RecordFromPage";
  19. SqlParameter[] para = SqlHelperParameterCache.GetSpParameterSet(con, cmd);
  20. para[].Value = query.Column;
  21. para[].Value = query.TableName;
  22. para[].Value = query.BulidQuery();
  23. para[].Value = query.OrderBy;
  24. para[].Value = pageindex;
  25. para[].Value = pagesize;
  26. para[].Direction = ParameterDirection.Output;
  27. //SqlParameter[] para = new SqlParameter[7];
  28. //para[0] = new SqlParameter("@SelectList", query.Column);
  29. //para[1] = new SqlParameter("@TableSource", query.TableName);
  30. //para[2] = new SqlParameter("@SearchCondition", query.BulidQuery());
  31. //para[3] = new SqlParameter("@OrderExpression", query.OrderBy);
  32. //para[4] = new SqlParameter("@pageindex", pageindex);
  33. //para[5] = new SqlParameter("@pagesize", pagesize);
  34. //para[6] = new SqlParameter("@TotalCount", SqlDbType.Int);
  35. //para[6].Direction = ParameterDirection.Output;
  36. IDataReader reader = SqlHelper.ExecuteReader(con, CommandType.StoredProcedure, cmd, para);
  37. p = para[];
  38. return reader;
  39. }
  40.  
  41. /// <summary>
  42. /// 分页获取数据列表 适用于SQL2005和SQL2008
  43. /// </summary>
  44. /// <param name="con">数据库连接字符串</param>
  45. /// <param name="pageindex">页索引 从0开始</param>
  46. /// <param name="pagesize">每页记录数</param>
  47. /// <param name="query">查询接口</param>
  48. /// <param name="p">输出参数</param>
  49. /// <returns>DataTable数据集</returns>
  50. public static DataTable GetDataByPager(string con, int pageindex, int pagesize, IQuery query, out SqlParameter p)
  51. {
  52. string cmd = "RecordFromPage";
  53. SqlParameter[] para = SqlHelperParameterCache.GetSpParameterSet(con, cmd);
  54. para[].Value = query.Column;
  55. para[].Value = query.TableName;
  56. para[].Value = query.BulidQuery();
  57. para[].Value = query.OrderBy;
  58. para[].Value = pageindex;
  59. para[].Value = pagesize;
  60. para[].Direction = ParameterDirection.Output;
  61. DataTable datatable = SqlHelper.ExecuteDataset(con,CommandType.StoredProcedure,cmd,para).Tables[];
  62. p = para[];
  63. return datatable;
  64. }
  65. }
  1. /// <summary>
  2. /// 简单查询帮助类
  3. /// </summary>
  4. public class CommonSelectSql
  5. {
  6. #region DataReader
  7. /// <summary>
  8. /// 获取数据
  9. /// </summary>
  10. /// <param name="con">数据库连接字符串</param>
  11. /// <param name="top">前几条</param>
  12. /// <param name="Query">查询构建类</param>
  13. /// <returns>DataReader数据表</returns>
  14. public static IDataReader SelectGetReader(string con,int top,IQuery Query)
  15. {
  16. return GetDataReader(con,top, Query.TableName, Query.Column, Query.BulidQuery(), Query.OrderBy);
  17. }
  18.  
  19. /// <summary>
  20. /// 获得前几行数据
  21. /// </summary>
  22. /// <param name="connstring">数据库连接字符串</param>
  23. /// <param name="Top">几条记录</param>
  24. /// <param name="tableName">表名</param>
  25. /// <param name="Column">列名</param>
  26. /// <param name="strWhere">查询条件</param>
  27. /// <param name="filedOrder">排序方式</param>
  28. /// <returns>DataReader数据表</returns>
  29. private static IDataReader GetDataReader(string connstring,int Top, string tableName, string Column, string strWhere, string filedOrder)
  30. {
  31. StringBuilder strSql = new StringBuilder();
  32. strSql.AppendFormat("SELECT * FROM(SELECT ROW_NUMBER() OVER(ORDER BY {0}) ROWNUM,", filedOrder);
  33. if (!string.IsNullOrEmpty(Column))
  34. {
  35. strSql.Append(Column);
  36. }
  37. else
  38. {
  39. strSql.Append("*");
  40. }
  41. strSql.Append(" FROM " + tableName);
  42. if (strWhere.Trim() != "")
  43. {
  44. strSql.Append(" where " + strWhere + ") T");
  45. }
  46. else
  47. {
  48. strSql.Append(") T");
  49. }
  50. if (Top > )
  51. {
  52. strSql.AppendFormat(" WHERE T.ROWNUM <= {0}",Top);
  53. }
  54. return SqlHelper.ExecuteReader(connstring, CommandType.Text, strSql.ToString());
  55. }
  56. #endregion
  57.  
  58. #region DataTable
  59.  
  60. /// <summary>
  61. /// 获取数据
  62. /// </summary>
  63. /// <param name="con">数据库连接字符串</param>
  64. /// <param name="top">前几条</param>
  65. /// <param name="Query">查询构建类</param>
  66. /// <returns>DataTable数据表</returns>
  67. public static DataTable SelectGetTable(string con, int top, IQuery Query)
  68. {
  69. return GetDataTable(con, top, Query.TableName, Query.Column, Query.BulidQuery(), Query.OrderBy);
  70. }
  71.  
  72. /// <summary>
  73. /// 获得前几行数据
  74. /// </summary>
  75. /// <param name="con">数据库连接字符串</param>
  76. /// <param name="Top">几条记录</param>
  77. /// <param name="tableName">表名</param>
  78. /// <param name="Column">列名</param>
  79. /// <param name="strWhere">查询条件</param>
  80. /// <param name="filedOrder">排序方式</param>
  81. /// <returns>DataTable数据表</returns>
  82. private static DataTable GetDataTable(string con,int Top, string tableName, string Column, string strWhere, string filedOrder)
  83. {
  84. StringBuilder strSql = new StringBuilder();
  85. strSql.Append("select ");
  86. if (Top > )
  87. {
  88. strSql.Append(" top " + Top.ToString());
  89. }
  90. strSql.Append(Column);
  91. strSql.Append(" FROM " + tableName);
  92. if (strWhere.Trim() != "")
  93. {
  94. strSql.Append(" where " + strWhere);
  95. }
  96. strSql.Append(" order by " + filedOrder);
  97. return SqlHelper.ExecuteDataset(con,CommandType.Text,strSql.ToString()).Tables[];
  98. }
  99. #endregion
  100. }
  1. /// <summary>
  2. /// 用来缓存SqlParameter
  3. /// </summary>
  4. public sealed class SqlHelperParameterCache
  5. {
  6. #region 私有方法,变量,跟构造函数
  7.  
  8. private SqlHelperParameterCache() { }
  9.  
  10. private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
  11.  
  12. /// <summary>
  13. /// 返回存储过程中的参数信息
  14. /// </summary>
  15. /// <param name="connection">数据库连接对象</param>
  16. /// <param name="spName">存储过程名</param>
  17. /// <param name="includeReturnValueParameter">是否返回需要返回的参数@RETURN_VALUE</param>
  18. /// <returns>返回的参数数组.</returns>
  19. private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
  20. {
  21. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  22. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  23.  
  24. SqlCommand cmd = new SqlCommand(spName, connection);
  25. cmd.CommandType = CommandType.StoredProcedure;
  26.  
  27. connection.Open();
  28. SqlCommandBuilder.DeriveParameters(cmd);
  29. connection.Close();
  30.  
  31. if (!includeReturnValueParameter)
  32. {
  33. cmd.Parameters.RemoveAt();
  34. }
  35.  
  36. SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count];
  37.  
  38. cmd.Parameters.CopyTo(discoveredParameters, );
  39.  
  40. foreach (SqlParameter discoveredParameter in discoveredParameters)
  41. {
  42. discoveredParameter.Value = DBNull.Value;
  43. }
  44. return discoveredParameters;
  45. }
  46.  
  47. /// <summary>
  48. /// 复制一份参数数组
  49. /// </summary>
  50. /// <param name="originalParameters">参数数组</param>
  51. /// <returns>参数数组</returns>
  52. private static SqlParameter[] CloneParameters(SqlParameter[] originalParameters)
  53. {
  54. SqlParameter[] clonedParameters = new SqlParameter[originalParameters.Length];
  55.  
  56. for (int i = , j = originalParameters.Length; i < j; i++)
  57. {
  58. clonedParameters[i] = (SqlParameter)((ICloneable)originalParameters[i]).Clone();
  59. }
  60.  
  61. return clonedParameters;
  62. }
  63.  
  64. #endregion
  65.  
  66. #region 缓存方法
  67.  
  68. /// <summary>
  69. /// 将参数数组添加到缓存
  70. /// </summary>
  71. /// <param name="connectionString">数据库连接字符串</param>
  72. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  73. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  74. public static void CacheParameterSet(string connectionString, string commandText, params SqlParameter[] commandParameters)
  75. {
  76. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("connectionString");
  77. if (commandText == null || commandText.Length == ) throw new ArgumentNullException("commandText");
  78.  
  79. string hashKey = connectionString + ":" + commandText;
  80.  
  81. paramCache[hashKey] = commandParameters;
  82. }
  83.  
  84. /// <summary>
  85. /// 从缓存里获取参数数组
  86. /// </summary>
  87. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  88. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  89. /// <returns>参数数组</returns>
  90. public static SqlParameter[] GetCachedParameterSet(string connectionString, string commandText)
  91. {
  92. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  93. if (commandText == null || commandText.Length == ) throw new ArgumentNullException("没有提供存储过程的名字或者 T-SQL 语句");
  94.  
  95. string hashKey = connectionString + ":" + commandText;
  96.  
  97. SqlParameter[] cachedParameters = paramCache[hashKey] as SqlParameter[];
  98. if (cachedParameters == null)
  99. {
  100. return null;
  101. }
  102. else
  103. {
  104. return CloneParameters(cachedParameters);
  105. }
  106. }
  107.  
  108. #endregion caching functions
  109.  
  110. #region 获取参数
  111.  
  112. /// <summary>
  113. /// 通过存储过程名跟连接字符串获取缓存中的参数数组
  114. /// </summary>
  115. /// <param name="connectionString">数据库连接字符串</param>
  116. /// <param name="spName">存储过程名</param>
  117. /// <returns>参数数组</returns>
  118. public static SqlParameter[] GetSpParameterSet(string connectionString, string spName)
  119. {
  120. return GetSpParameterSet(connectionString, spName, false);
  121. }
  122.  
  123. /// <summary>
  124. /// 通过存储过程名跟连接字符串获取缓存中的参数数组
  125. /// </summary>
  126. /// <param name="connectionString">数据库连接字符串</param>
  127. /// <param name="spName">存储过程名</param>
  128. /// <param name="includeReturnValueParameter">是否返回输出参数</param>
  129. /// <returns>参数数组</returns>
  130. public static SqlParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
  131. {
  132. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  133. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  134.  
  135. using (SqlConnection connection = new SqlConnection(connectionString))
  136. {
  137. return GetSpParameterSetInternal(connection, spName, includeReturnValueParameter);
  138. }
  139. }
  140.  
  141. /// <summary>
  142. /// 通过数据库连接对象获取缓存中的参数数组
  143. /// </summary>
  144. /// <param name="connection">数据库连接对象</param>
  145. /// <param name="spName">存储过程名</param>
  146. /// <returns>参数数组</returns>
  147. internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName)
  148. {
  149. return GetSpParameterSet(connection, spName, false);
  150. }
  151.  
  152. /// <summary>
  153. /// 通过数据库连接对象获取缓存中的参数数组
  154. /// </summary>
  155. /// <param name="connection">数据库连接对象</param>
  156. /// <param name="spName">存储过程名</param>
  157. /// <param name="includeReturnValueParameter">是否返回输出参数</param>
  158. /// <returns>参数数组</returns>
  159. internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
  160. {
  161. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  162. using (SqlConnection clonedConnection = (SqlConnection)((ICloneable)connection).Clone())
  163. {
  164. return GetSpParameterSetInternal(clonedConnection, spName, includeReturnValueParameter);
  165. }
  166. }
  167.  
  168. /// <summary>
  169. /// 通过数据库连接对象获取缓存中的参数数组
  170. /// </summary>
  171. /// <param name="connection">数据库连接对象</param>
  172. /// <param name="spName">存储过程名</param>
  173. /// <param name="includeReturnValueParameter">是否返回输出参数</param>
  174. /// <returns>参数数组</returns>
  175. private static SqlParameter[] GetSpParameterSetInternal(SqlConnection connection, string spName, bool includeReturnValueParameter)
  176. {
  177. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  178. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  179.  
  180. string hashKey = connection.ConnectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
  181.  
  182. SqlParameter[] cachedParameters;
  183.  
  184. cachedParameters = paramCache[hashKey] as SqlParameter[];
  185. if (cachedParameters == null)
  186. {
  187. SqlParameter[] spParameters = DiscoverSpParameterSet(connection, spName, includeReturnValueParameter);
  188. paramCache[hashKey] = spParameters;
  189. cachedParameters = spParameters;
  190. }
  191.  
  192. return CloneParameters(cachedParameters);
  193. }
  194.  
  195. #endregion
  196.  
  197. }
  1. /// <summary>
  2. /// 封装数据库操作方法
  3. /// </summary>
  4. public abstract class SqlHelper
  5. {
  6. #region 私有方法以及构造方法
  7.  
  8. //不允许建立实例
  9. private SqlHelper() { }
  10.  
  11. //获取数据库连接
  12. public static SqlConnection GetSqlConnection(string con)
  13. {
  14.  
  15. try
  16. {
  17. return new SqlConnection(con);
  18. }
  19. catch
  20. {
  21. throw new Exception("连接出错");
  22. }
  23.  
  24. }
  25.  
  26. /// <summary>
  27. /// 这个方法给SqlCommand添加参数
  28. /// </summary>
  29. /// <param name="command">需要添加参数的command</param>
  30. /// <param name="commandParameters">参数数组</param>
  31. private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
  32. {
  33. if (command == null) throw new ArgumentNullException("command");
  34. if (commandParameters != null)
  35. {
  36. foreach (SqlParameter p in commandParameters)
  37. {
  38. if (p != null)
  39. {
  40. // 检查当为输入参数时赋予默认值
  41. if ((p.Direction == ParameterDirection.InputOutput ||
  42. p.Direction == ParameterDirection.Input) &&
  43. (p.Value == null))
  44. {
  45. p.Value = DBNull.Value;
  46. }
  47. command.Parameters.Add(p);
  48. }
  49. }
  50. }
  51. }
  52.  
  53. /// <summary>
  54. /// 这个方法使用的DataRow列的值填充SqlParameter数组
  55. /// </summary>
  56. /// <param name="commandParameters">需要填充到SqlParameter数组的DataRow</param>
  57. /// <param name="dataRow">需要用到的DataRow</param>
  58. private static void AssignParameterValues(SqlParameter[] commandParameters, DataRow dataRow)
  59. {
  60. if ((commandParameters == null) || (dataRow == null))
  61. {
  62. return;
  63. }
  64.  
  65. int i = ;
  66. foreach (SqlParameter commandParameter in commandParameters)
  67. {
  68. if (commandParameter.ParameterName == null ||
  69. commandParameter.ParameterName.Length <= )
  70. throw new Exception(
  71. "没有给SqlParameter赋予ParameterName");
  72. if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring()) != -)
  73. commandParameter.Value = dataRow[commandParameter.ParameterName.Substring()];
  74. i++;
  75. }
  76. }
  77.  
  78. /// <summary>
  79. /// 给SqlParameter数组赋值
  80. /// </summary>
  81. /// <param name="commandParameters">SqlParameter数组</param>
  82. /// <param name="parameterValues">参数值的数组</param>
  83. private static void AssignParameterValues(SqlParameter[] commandParameters, object[] parameterValues)
  84. {
  85. if ((commandParameters == null) || (parameterValues == null))
  86. {
  87. return;
  88. }
  89.  
  90. if (commandParameters.Length != parameterValues.Length)
  91. {
  92. throw new ArgumentException("SqlParameter数组的长度跟参数值的数组的长度不匹配");
  93. }
  94.  
  95. // Iterate through the SqlParameters, assigning the values from the corresponding position in the
  96. // value array
  97. for (int i = , j = commandParameters.Length; i < j; i++)
  98. {
  99. // 如果目前的数组值来自IDbDataParameter 则填充
  100. if (parameterValues[i] is IDbDataParameter)
  101. {
  102. IDbDataParameter paramInstance = (IDbDataParameter)parameterValues[i];
  103. if (paramInstance.Value == null)
  104. {
  105. commandParameters[i].Value = DBNull.Value;
  106. }
  107. else
  108. {
  109. commandParameters[i].Value = paramInstance.Value;
  110. }
  111. }
  112. else if (parameterValues[i] == null)
  113. {
  114. commandParameters[i].Value = DBNull.Value;
  115. }
  116. else
  117. {
  118. commandParameters[i].Value = parameterValues[i];
  119. }
  120. }
  121. }
  122.  
  123. /// <summary>
  124. /// 为执行sql命令做准备
  125. /// </summary>
  126. /// <param name="command">sql指令</param>
  127. /// <param name="connection">数据库连接</param>
  128. /// <param name="transaction">数据库事务</param>
  129. /// <param name="commandType">指令类型</param>
  130. /// <param name="commandText">sql语句或存储过程</param>
  131. /// <param name="commandParameters">执行sql需要传入的参数</param>
  132. /// <param name="mustCloseConnection">如果sql连接还没有关闭着返回true</param>
  133. private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, out bool mustCloseConnection)
  134. {
  135. if (command == null) throw new ArgumentNullException("缺少SqlCommand参数");
  136. if (commandText == null || commandText.Length == ) throw new ArgumentNullException("缺少sql语句或存储过程语句");
  137.  
  138. //当数据库没有连接则连接
  139. if (connection.State != ConnectionState.Open)
  140. {
  141. mustCloseConnection = true;
  142. connection.Open();
  143. }
  144. else
  145. {
  146. mustCloseConnection = true;
  147. }
  148. command.Connection = connection;
  149. command.CommandText = commandText;
  150.  
  151. if (transaction != null)
  152. {
  153. if (transaction.Connection == null) throw new ArgumentException("请提供一个已经打开的事务", "transaction");
  154. command.Transaction = transaction;
  155. }
  156. command.CommandType = commandType;
  157.  
  158. if (commandParameters != null)
  159. {
  160. AttachParameters(command, commandParameters);
  161. }
  162. return;
  163. }
  164.  
  165. #endregion
  166.  
  167. #region ExecuteNonQuery
  168.  
  169. /// <summary>
  170. ///执行的SqlCommand (返回结果并没有任何参数)
  171. /// </summary>
  172. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  173. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等)</param>
  174. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  175. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  176. public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
  177. {
  178. return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);
  179. }
  180.  
  181. /// <summary>
  182. ///执行的SqlCommand (没有返回结果)
  183. /// </summary>
  184. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  185. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等)</param>
  186. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  187. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  188. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  189. public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  190. {
  191. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  192. using (SqlConnection connection = new SqlConnection(connectionString))
  193. {
  194. connection.Open();
  195. return ExecuteNonQuery(connection, commandType, commandText, commandParameters);
  196. }
  197. }
  198.  
  199. /// <summary>
  200. /// 执行存储过程通过的SqlCommand (没有返回结果)
  201. /// </summary>
  202. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  203. /// <param name="spName">存储过程名称</param>
  204. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  205. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  206. public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
  207. {
  208. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  209. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  210. if ((parameterValues != null) && (parameterValues.Length > ))
  211. {
  212. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  213. AssignParameterValues(commandParameters, parameterValues);
  214. return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  215. }
  216. else
  217. {
  218. return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
  219. }
  220. }
  221.  
  222. /// <summary>
  223. /// 执行的SqlCommand (返回结果并没有任何参数)。
  224. /// </summary>
  225. /// <param name="connection">SqlConnection连接</param>
  226. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等)</param>
  227. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  228. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  229. public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)
  230. {
  231. // Pass through the call providing null for the set of SqlParameters
  232. return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
  233. }
  234.  
  235. /// <summary>
  236. /// 执行的SqlCommand (返回结果并没有任何参数)
  237. /// </summary>
  238. /// <param name="connection">一个现有的数据库连接</param>
  239. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  240. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  241. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  242. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  243. public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  244. {
  245. if (connection == null) throw new ArgumentNullException("没有提供现有的数据库连接");
  246. SqlCommand cmd = new SqlCommand();
  247. bool mustCloseConnection = true;
  248. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
  249. int retval = cmd.ExecuteNonQuery();
  250. cmd.Parameters.Clear();
  251. if (mustCloseConnection)
  252. connection.Close();
  253. return retval;
  254. }
  255.  
  256. /// <summary>
  257. ///执行存储过程通过的SqlCommand (没有返回结果)
  258. /// </summary>
  259. /// <param name="connection">一个现有的数据库连接</param>
  260. /// <param name="spName">存储过程名称</param>
  261. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  262. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  263. public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)
  264. {
  265. if (connection == null) throw new ArgumentNullException("没有提供现有的数据库连接");
  266. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程的名字");
  267. if ((parameterValues != null) && (parameterValues.Length > ))
  268. {
  269. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  270. AssignParameterValues(commandParameters, parameterValues);
  271. return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
  272. }
  273. else
  274. {
  275. return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
  276. }
  277. }
  278.  
  279. /// <summary>
  280. /// 执行的SqlCommand (没有返回结果并没有任何参数)对所提供的SqlTransaction 。
  281. /// </summary>
  282. /// <param name="transaction">事务</param>
  283. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  284. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  285. /// <returns>A返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  286. public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText)
  287. {
  288. return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter[])null);
  289. }
  290.  
  291. /// <summary>
  292. /// 执行的SqlCommand (没有返回结果)对所提供的SqlTransaction 。
  293. /// </summary>
  294. /// <param name="transaction">事务</param>
  295. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  296. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  297. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  298. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  299. public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  300. {
  301. if (transaction == null) throw new ArgumentNullException("transaction");
  302. if (transaction != null && transaction.Connection == null) throw new ArgumentException("请为提供SqlTransaction提供连接", "transaction");
  303. SqlCommand cmd = new SqlCommand();
  304. bool mustCloseConnection = true;
  305. PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  306. int retval = cmd.ExecuteNonQuery();
  307. cmd.Parameters.Clear();
  308. return retval;
  309. }
  310.  
  311. /// <summary>
  312. /// 执行的SqlCommand (没有返回结果)对所提供的SqlTransaction
  313. /// </summary>
  314. /// <param name="transaction">事务</param>
  315. /// <param name="spName">存储过程名</param>
  316. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  317. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  318. public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)
  319. {
  320. if (transaction == null) throw new ArgumentNullException("transaction");
  321. if (transaction != null && transaction.Connection == null) throw new ArgumentException("请为提供SqlTransaction提供连接", "transaction");
  322. if (spName == null || spName.Length == ) throw new ArgumentNullException("请提供存储过程名");
  323.  
  324. if ((parameterValues != null) && (parameterValues.Length > ))
  325. {
  326.  
  327. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  328.  
  329. AssignParameterValues(commandParameters, parameterValues);
  330.  
  331. return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
  332. }
  333. else
  334. {
  335. return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
  336. }
  337. }
  338.  
  339. #endregion ExecuteNonQuery
  340.  
  341. #region ExecuteDataset
  342.  
  343. /// <summary>
  344. /// 执行的SqlCommand (即返回一个结果,并没有任何参数)
  345. /// </summary>
  346. /// <param name="connectionString">数据库连接字符串</param>
  347. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  348. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  349. /// <returns>返回结果集DataSet</returns>
  350. public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
  351. {
  352. return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);
  353. }
  354.  
  355. /// <summary>
  356. /// 执行的SqlCommand (即返回一个结果)
  357. /// </summary>
  358. /// <param name="connectionString">数据库连接字符串</param>
  359. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  360. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  361. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  362. /// <returns>返回结果集DataSet</returns>
  363. public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  364. {
  365. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("connectionString参数没有提供");
  366. using (SqlConnection connection = new SqlConnection(connectionString))
  367. {
  368. connection.Open();
  369. return ExecuteDataset(connection, commandType, commandText, commandParameters);
  370. }
  371. }
  372.  
  373. /// <summary>
  374. /// 使用存储过程执行的SqlCommand (即返回一个结果).
  375. /// </summary>
  376. /// <param name="connectionString">数据库连接字符串</param>
  377. /// <param name="spName">存储过程名</param>
  378. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  379. /// <returns>返回结果集DataSet</returns>
  380. public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
  381. {
  382. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("connectionString参数没有提供");
  383. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  384.  
  385. if ((parameterValues != null) && (parameterValues.Length > ))
  386. {
  387. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  388. AssignParameterValues(commandParameters, parameterValues);
  389. return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  390. }
  391. else
  392. {
  393. return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
  394. }
  395. }
  396.  
  397. /// <summary>
  398. /// 执行的SqlCommand (即返回一个结果,并没有任何参数)
  399. /// </summary>
  400. /// <param name="connection">数据库连接对象</param>
  401. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  402. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  403. /// <returns>返回结果集DataSet</returns>
  404. public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
  405. {
  406. return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
  407. }
  408.  
  409. /// <summary>
  410. /// 执行的SqlCommand (即返回一个结果)
  411. /// </summary>
  412. /// <param name="connection">数据库连接对象</param>
  413. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  414. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  415. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  416. /// <returns>返回结果集DataSet</returns>
  417. public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  418. {
  419. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  420.  
  421. SqlCommand cmd = new SqlCommand();
  422. bool mustCloseConnection = true;
  423. cmd.CommandTimeout = connection.ConnectionTimeout;
  424. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
  425.  
  426. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  427. {
  428. DataSet ds = new DataSet();
  429. da.Fill(ds);
  430. cmd.Parameters.Clear();
  431.  
  432. if (mustCloseConnection)
  433. connection.Close();
  434. return ds;
  435. }
  436. }
  437.  
  438. /// <summary>
  439. /// 使用存储过程执行的SqlCommand (即返回一个结果).
  440. /// </summary>
  441. /// <param name="connection">数据库连接对象</param>
  442. /// <param name="spName">存储过程的名</param>
  443. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  444. /// <returns>返回结果集DataSet</returns>
  445. public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)
  446. {
  447. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  448. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  449. if ((parameterValues != null) && (parameterValues.Length > ))
  450. {
  451. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  452. AssignParameterValues(commandParameters, parameterValues);
  453. return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
  454. }
  455. else
  456. {
  457. return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
  458. }
  459. }
  460.  
  461. /// <summary>
  462. /// 执行的SqlCommand (即返回一个结果,没有任何参数)对所提供的SqlTransaction 。
  463. /// </summary>
  464. /// <param name="transaction">事务</param>
  465. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  466. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  467. /// <returns>返回结果集DataSet</returns>
  468. public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText)
  469. {
  470. return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);
  471. }
  472.  
  473. /// <summary>
  474. /// 执行的SqlCommand (即返回一个结果)对所提供的SqlTransaction 。
  475. /// </summary>
  476. /// <param name="transaction">事务</param>
  477. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  478. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  479. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  480. /// <returns>返回结果集DataSet</returns>
  481. public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  482. {
  483. if (transaction == null) throw new ArgumentNullException("没有提供transaction");
  484. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction.", "transaction");
  485.  
  486. SqlCommand cmd = new SqlCommand();
  487. bool mustCloseConnection = true;
  488. PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  489.  
  490. using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  491. {
  492. DataSet ds = new DataSet();
  493. da.Fill(ds);
  494. cmd.Parameters.Clear();
  495. return ds;
  496. }
  497. }
  498.  
  499. /// <summary>
  500. /// 使用存储过程执行的SqlCommand (即返回一个结果)对所提供的SqlTransaction 。.
  501. /// </summary>
  502. /// <param name="transaction">事务</param>
  503. /// <param name="spName">存储过程名</param>
  504. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  505. /// <returns>返回结果集DataSet</returns>
  506. public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)
  507. {
  508. if (transaction == null) throw new ArgumentNullException("没有提供transaction");
  509. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction.", "transaction");
  510. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  511.  
  512. if ((parameterValues != null) && (parameterValues.Length > ))
  513. {
  514. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  515.  
  516. AssignParameterValues(commandParameters, parameterValues);
  517.  
  518. return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
  519. }
  520. else
  521. {
  522. return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
  523. }
  524. }
  525.  
  526. #endregion ExecuteDataset
  527.  
  528. #region ExecuteReader
  529.  
  530. /// <summary>
  531. /// 这个枚举用来表是把数据库连接对象交给sqlHelper来处理还是调用者自己进行处理
  532. /// </summary>
  533. private enum SqlConnectionOwnership
  534. {
  535. /// <summary>SqlHelper来处理</summary>
  536. Internal,
  537. /// <summary>调用者自行处理</summary>
  538. External
  539. }
  540.  
  541. /// <summary>
  542. /// 执行的SqlCommand (即返回一个只读结果)
  543. /// </summary>
  544. /// <param name="connection">一个有效的SqlConnection </param>
  545. /// <param name="transaction">一个有效的SqlTransaction,可以为null</param>
  546. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  547. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  548. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  549. /// <param name="connectionOwnership">sqlHelper来处理还是调用者自己进行处理数据库连接对象</param>
  550. /// <returns>返回一个只读结果</returns>
  551. private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)
  552. {
  553. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  554.  
  555. bool mustCloseConnection = true;
  556. SqlCommand cmd = new SqlCommand();
  557. cmd.CommandTimeout = ;
  558. try
  559. {
  560. PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  561. SqlDataReader dataReader;
  562.  
  563. if (connectionOwnership == SqlConnectionOwnership.External)
  564. {
  565. dataReader = cmd.ExecuteReader();
  566. }
  567. else
  568. {
  569. dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  570. }
  571. bool canClear = true;
  572. foreach (SqlParameter commandParameter in cmd.Parameters)
  573. {
  574. if (commandParameter.Direction != ParameterDirection.Input)
  575. canClear = false;
  576. }
  577. if (canClear)
  578. {
  579. cmd.Parameters.Clear();
  580. }
  581. return dataReader;
  582. }
  583. catch
  584. {
  585. if (mustCloseConnection)
  586. connection.Close();
  587. throw;
  588. }
  589. }
  590.  
  591. /// <summary>
  592. /// 执行的SqlCommand (即返回一个只读结果,没有参数)
  593. /// </summary>
  594. /// <param name="connectionString">数据库连接字符串</param>
  595. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  596. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  597. /// <returns>返回一个只读结果</returns>
  598. public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
  599. {
  600. return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
  601. }
  602.  
  603. /// <summary>
  604. /// 执行的SqlCommand (即返回一个只读结果)
  605. /// </summary>
  606. /// <param name="connectionString">数据库连接字符串</param>
  607. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  608. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  609. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  610. /// <returns>返回一个只读结果</returns>
  611. public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  612. {
  613. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  614. SqlConnection connection = null;
  615. try
  616. {
  617. connection = new SqlConnection(connectionString);
  618. connection.Open();
  619. return ExecuteReader(connection, null, commandType, commandText, commandParameters, SqlConnectionOwnership.Internal);
  620. }
  621. catch
  622. {
  623. if (connection != null) connection.Close();
  624. throw;
  625. }
  626.  
  627. }
  628.  
  629. /// <summary>
  630. /// 使用存储过程执行SqlCommand (即返回一个只读结果)
  631. /// </summary>
  632. /// <param name="connectionString">数据库连接字符串</param>
  633. /// <param name="spName">存储过程名</param>
  634. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  635. /// <returns>返回一个只读结果</returns>
  636. public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
  637. {
  638. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  639. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  640.  
  641. if ((parameterValues != null) && (parameterValues.Length > ))
  642. {
  643. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  644.  
  645. AssignParameterValues(commandParameters, parameterValues);
  646.  
  647. return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  648. }
  649. else
  650. {
  651. return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
  652. }
  653. }
  654.  
  655. /// <summary>
  656. /// 执行的SqlCommand (即返回一个只读结果,没有参数)
  657. /// </summary>
  658. /// <param name="connection">一个有效的SqlConnection </param>
  659. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  660. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  661. /// <returns>返回一个只读结果</returns>
  662. public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText)
  663. {
  664. return ExecuteReader(connection, commandType, commandText, (SqlParameter[])null);
  665. }
  666.  
  667. /// <summary>
  668. /// 执行的SqlCommand (即返回一个只读结果)
  669. /// </summary>
  670. /// <param name="connection">一个有效的SqlConnection</param>
  671. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  672. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  673. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  674. /// <returns>返回一个只读结果</returns>
  675. public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  676. {
  677. return ExecuteReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
  678. }
  679.  
  680. /// <summary>
  681. /// 使用存储过程执行SqlCommand (即返回一个只读结果)
  682. /// </summary>
  683. /// <param name="connection">一个有效的SqlConnection</param>
  684. /// <param name="spName">存储过程名</param>
  685. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  686. /// <returns>返回一个只读结果</returns>
  687. public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)
  688. {
  689. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  690. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  691.  
  692. if ((parameterValues != null) && (parameterValues.Length > ))
  693. {
  694. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  695.  
  696. AssignParameterValues(commandParameters, parameterValues);
  697.  
  698. return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
  699. }
  700. else
  701. {
  702. return ExecuteReader(connection, CommandType.StoredProcedure, spName);
  703. }
  704. }
  705.  
  706. /// <summary>
  707. /// 执行的SqlCommand (即返回一个只读结果,没有传入的参数)对所提供的SqlTransaction 。.
  708. /// </summary>
  709. /// <param name="transaction">一个有效的SqlTransaction</param>
  710. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  711. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  712. /// <returns>返回一个只读结果</returns>
  713. public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText)
  714. {
  715. return ExecuteReader(transaction, commandType, commandText, (SqlParameter[])null);
  716. }
  717.  
  718. /// <summary>
  719. /// 执行的SqlCommand (即返回一个只读结果)对所提供的SqlTransaction 。
  720. /// </summary>
  721. /// <param name="transaction">一个有效的SqlTransaction</param>
  722. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  723. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  724. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  725. /// <returns>返回一个只读结果</returns>
  726. public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  727. {
  728. if (transaction == null) throw new ArgumentNullException("没有提供transaction");
  729. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction.", "transaction");
  730.  
  731. return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
  732. }
  733.  
  734. /// <summary>
  735. /// 使用存储过程执行的SqlCommand (即返回一个只读结果)对所提供的SqlTransaction 。
  736. /// </summary>
  737. /// <param name="transaction">一个有效的SqlTransaction</param>
  738. /// <param name="spName">存储过程名</param>
  739. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  740. /// <returns>返回一个只读结果</returns>
  741. public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)
  742. {
  743. if (transaction == null) throw new ArgumentNullException("没有提供transaction");
  744. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction.", "transaction");
  745. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程");
  746.  
  747. if ((parameterValues != null) && (parameterValues.Length > ))
  748. {
  749. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  750.  
  751. AssignParameterValues(commandParameters, parameterValues);
  752.  
  753. return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
  754. }
  755. else
  756. {
  757. return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
  758. }
  759. }
  760.  
  761. #endregion ExecuteReader
  762.  
  763. #region ExecuteScalar
  764.  
  765. /// <summary>
  766. /// 执行的SqlCommand (即返回第一行第一列,不带参数)
  767. /// </summary>
  768. /// <param name="connectionString">数据库连接字符串</param>
  769. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  770. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  771. /// <returns>返回数据库中第一行第一列的数据</returns>
  772. public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
  773. {
  774. return ExecuteScalar(connectionString, commandType, commandText, (SqlParameter[])null);
  775. }
  776.  
  777. /// <summary>
  778. /// 执行的SqlCommand (即返回第一行第一列)
  779. /// </summary>
  780. /// <param name="connectionString">数据库连接字符串</param>
  781. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  782. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  783. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  784. /// <returns>返回数据库中第一行第一列的数据</returns>
  785. public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  786. {
  787. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  788. using (SqlConnection connection = new SqlConnection(connectionString))
  789. {
  790. connection.Open();
  791. return ExecuteScalar(connection, commandType, commandText, commandParameters);
  792. }
  793. }
  794.  
  795. /// <summary>
  796. /// 使用存储过程执行的SqlCommand (即返回第一行第一列)
  797. /// </summary>
  798. /// <param name="connectionString">数据库连接字符串</param>
  799. /// <param name="spName">存储过程名</param>
  800. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  801. /// <returns>返回数据库中第一行第一列的数据</returns>
  802. public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
  803. {
  804. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  805. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  806.  
  807. if ((parameterValues != null) && (parameterValues.Length > ))
  808. {
  809. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  810. AssignParameterValues(commandParameters, parameterValues);
  811. return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  812. }
  813. else
  814. {
  815. return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
  816. }
  817. }
  818.  
  819. /// <summary>
  820. ///执行的SqlCommand (即返回第一行第一列,不带参数)
  821. /// </summary>
  822. /// <param name="connection">有效的数据库连接</param>
  823. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  824. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  825. /// <returns>返回数据库中第一行第一列的数据</returns>
  826. public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
  827. {
  828. return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);
  829. }
  830.  
  831. /// <summary>
  832. /// 有效的数据库连接
  833. /// </summary>
  834. /// <param name="connection">有效的数据库连接</param>
  835. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  836. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  837. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  838. /// <returns>返回数据库中第一行第一列的数据</returns>
  839. public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  840. {
  841. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  842. SqlCommand cmd = new SqlCommand();
  843.  
  844. bool mustCloseConnection = true;
  845. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
  846. object retval = cmd.ExecuteScalar();
  847.  
  848. cmd.Parameters.Clear();
  849.  
  850. if (mustCloseConnection)
  851. connection.Close();
  852.  
  853. return retval;
  854. }
  855.  
  856. /// <summary>
  857. /// 使用存储过程执行的SqlCommand (即返回第一行第一列)
  858. /// </summary>
  859. /// <param name="connection">有效的数据库连接</param>
  860. /// <param name="spName">存储过程名</param>
  861. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  862. /// <returns>返回数据库中第一行第一列的数据</returns>
  863. public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)
  864. {
  865. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  866. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  867.  
  868. if ((parameterValues != null) && (parameterValues.Length > ))
  869. {
  870. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  871.  
  872. AssignParameterValues(commandParameters, parameterValues);
  873. return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
  874. }
  875. else
  876. {
  877. return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
  878. }
  879. }
  880.  
  881. /// <summary>
  882. /// 执行SqlCommand (即返回第一行第一列,不带参数)对所提供的SqlTransaction 。
  883. /// </summary>
  884. /// <param name="transaction">一个有效的SqlTransaction</param>
  885. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  886. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  887. /// <returns>返回数据库中第一行第一列的数据</returns>
  888. public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText)
  889. {
  890. return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);
  891. }
  892.  
  893. /// <summary>
  894. /// 执行SqlCommand (即返回第一行第一列)对所提供的SqlTransaction 。
  895. /// </summary>
  896. /// <param name="transaction">一个有效的SqlTransaction</param>
  897. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  898. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  899. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  900. /// <returns>返回数据库中第一行第一列的数据</returns>
  901. public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  902. {
  903. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  904. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction", "transaction");
  905.  
  906. SqlCommand cmd = new SqlCommand();
  907. bool mustCloseConnection = true;
  908. PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  909. object retval = cmd.ExecuteScalar();
  910.  
  911. cmd.Parameters.Clear();
  912. return retval;
  913. }
  914.  
  915. /// <summary>
  916. /// 使用存储过程执行的SqlCommand (即返回第一行第一列)对所提供的SqlTransaction 。
  917. /// </summary>
  918. /// <param name="transaction">一个有效的SqlTransaction</param>
  919. /// <param name="spName">存储过程名</param>
  920. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  921. /// <returns>返回数据库中第一行第一列的数据</returns>
  922. public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)
  923. {
  924. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  925. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction", "transaction");
  926. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  927.  
  928. if ((parameterValues != null) && (parameterValues.Length > ))
  929. {
  930. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  931.  
  932. AssignParameterValues(commandParameters, parameterValues);
  933. return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
  934. }
  935. else
  936. {
  937. return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
  938. }
  939. }
  940.  
  941. #endregion ExecuteScalar
  942.  
  943. #region ExecuteXmlReader
  944. /// <summary>
  945. /// 执行的SqlCommand (即返回一个XmlReader,并没有任何参数)对所提供的SqlConnection 。
  946. /// </summary>
  947. /// <param name="connection">有效的数据库连接</param>
  948. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  949. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  950. /// <returns>返回的xmlReader对象</returns>
  951. public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText)
  952. {
  953. return ExecuteXmlReader(connection, commandType, commandText, (SqlParameter[])null);
  954. }
  955.  
  956. /// <summary>
  957. /// 执行的SqlCommand (即返回一个XmlReader)对所提供的SqlConnection 。
  958. /// </summary>
  959. /// <param name="connection">有效的数据库连接</param>
  960. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  961. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  962. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  963. /// <returns>返回的xmlReader对象</returns>
  964. public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  965. {
  966. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  967.  
  968. bool mustCloseConnection = true;
  969. SqlCommand cmd = new SqlCommand();
  970. try
  971. {
  972. PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
  973. XmlReader retval = cmd.ExecuteXmlReader();
  974. cmd.Parameters.Clear();
  975.  
  976. return retval;
  977. }
  978. catch
  979. {
  980. if (mustCloseConnection)
  981. connection.Close();
  982. throw;
  983. }
  984. }
  985.  
  986. /// <summary>
  987. /// 使用存储过程执行的SqlCommand (即返回一个XmlReader)对所提供的SqlConnection 。
  988. /// </summary>
  989. /// <param name="connection">有效的数据库连接</param>
  990. /// <param name="spName">存储过程名</param>
  991. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  992. /// <returns>返回的xmlReader对象</returns>
  993. public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues)
  994. {
  995. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  996. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  997.  
  998. if ((parameterValues != null) && (parameterValues.Length > ))
  999. {
  1000. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1001. AssignParameterValues(commandParameters, parameterValues);
  1002. return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
  1003. }
  1004. else
  1005. {
  1006. return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
  1007. }
  1008. }
  1009.  
  1010. /// <summary>
  1011. /// 执行SqlCommand (即返回第一行第一列,不带参数)对所提供的SqlTransaction 。
  1012. /// </summary>
  1013. /// <param name="transaction">一个有效的SqlTransaction</param>
  1014. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1015. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1016. /// <returns>返回的xmlReader对象</returns>
  1017. public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText)
  1018. {
  1019. return ExecuteXmlReader(transaction, commandType, commandText, (SqlParameter[])null);
  1020. }
  1021.  
  1022. /// <summary>
  1023. /// 执行SqlCommand (即返回第一行第一列)对所提供的SqlTransaction 。
  1024. /// </summary>
  1025. /// <param name="transaction">一个有效的SqlTransaction</param>
  1026. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1027. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1028. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1029. /// <returns>返回的xmlReader对象</returns>
  1030. public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  1031. {
  1032. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1033. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction", "transaction");
  1034. SqlCommand cmd = new SqlCommand();
  1035. bool mustCloseConnection = true;
  1036. PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  1037.  
  1038. XmlReader retval = cmd.ExecuteXmlReader();
  1039.  
  1040. cmd.Parameters.Clear();
  1041. return retval;
  1042. }
  1043.  
  1044. /// <summary>
  1045. /// 使用存储过程执行SqlCommand (即返回第一行第一列)对所提供的SqlTransaction 。
  1046. /// </summary>
  1047. /// <param name="transaction">一个有效的SqlTransaction</param>
  1048. /// <param name="spName">存储过程名</param>
  1049. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1050. /// <returns>返回的xmlReader对象</returns>
  1051. public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues)
  1052. {
  1053. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1054. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction", "transaction");
  1055. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程");
  1056.  
  1057. if ((parameterValues != null) && (parameterValues.Length > ))
  1058. {
  1059. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1060.  
  1061. AssignParameterValues(commandParameters, parameterValues);
  1062. return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1063. }
  1064. else
  1065. {
  1066. return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
  1067. }
  1068. }
  1069.  
  1070. #endregion ExecuteXmlReader
  1071.  
  1072. #region FillDataset
  1073. /// <summary>
  1074. /// 执行的SqlCommand (即返回一个DataSet,并没有任何参数)
  1075. /// </summary>
  1076. /// <param name="connectionString">数据库连接对象字符串</param>
  1077. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1078. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1079. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1080. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)</param>
  1081. public static void FillDataset(string connectionString, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
  1082. {
  1083. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("缺少数据库连接字符串");
  1084. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1085.  
  1086. using (SqlConnection connection = new SqlConnection(connectionString))
  1087. {
  1088. connection.Open();
  1089. FillDataset(connection, commandType, commandText, dataSet, tableNames);
  1090. }
  1091. }
  1092.  
  1093. /// <summary>
  1094. /// 执行的SqlCommand (即返回一个DataSet)
  1095. /// </summary>
  1096. /// <param name="connectionString">数据库连接对象字符串</param>
  1097. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1098. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1099. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1100. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1101. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1102. /// </param>
  1103. public static void FillDataset(string connectionString, CommandType commandType,
  1104. string commandText, DataSet dataSet, string[] tableNames,
  1105. params SqlParameter[] commandParameters)
  1106. {
  1107. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("缺少数据库连接字符串");
  1108. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1109. using (SqlConnection connection = new SqlConnection(connectionString))
  1110. {
  1111. connection.Open();
  1112. FillDataset(connection, commandType, commandText, dataSet, tableNames, commandParameters);
  1113. }
  1114. }
  1115.  
  1116. /// <summary>
  1117. /// 使用存储过程执行的SqlCommand (即返回一个DataSet)
  1118. /// </summary>
  1119. /// <param name="connectionString">数据库连接对象字符串</param>
  1120. /// <param name="spName">存储过程名</param>
  1121. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1122. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1123. /// </param>
  1124. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1125. public static void FillDataset(string connectionString, string spName,
  1126. DataSet dataSet, string[] tableNames,
  1127. params object[] parameterValues)
  1128. {
  1129. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("缺少数据库连接字符串");
  1130. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1131.  
  1132. using (SqlConnection connection = new SqlConnection(connectionString))
  1133. {
  1134. connection.Open();
  1135.  
  1136. FillDataset(connection, spName, dataSet, tableNames, parameterValues);
  1137. }
  1138. }
  1139.  
  1140. /// <summary>
  1141. /// 执行的SqlCommand (即返回一个DataSet,不带参数)
  1142. /// </summary>
  1143. /// <param name="connection">数据库连接对象</param>
  1144. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1145. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1146. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1147. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1148. /// </param>
  1149. public static void FillDataset(SqlConnection connection, CommandType commandType,
  1150. string commandText, DataSet dataSet, string[] tableNames)
  1151. {
  1152. FillDataset(connection, commandType, commandText, dataSet, tableNames, null);
  1153. }
  1154.  
  1155. /// <summary>
  1156. /// 执行的SqlCommand (即返回一个DataSet)
  1157. /// </summary>
  1158. /// <param name="connection">数据库连接对象</param>
  1159. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1160. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1161. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1162. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1163. /// </param>
  1164. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1165. public static void FillDataset(SqlConnection connection, CommandType commandType,
  1166. string commandText, DataSet dataSet, string[] tableNames,
  1167. params SqlParameter[] commandParameters)
  1168. {
  1169. FillDataset(connection, null, commandType, commandText, dataSet, tableNames, commandParameters);
  1170. }
  1171.  
  1172. /// <summary>
  1173. /// 执行的SqlCommand (即返回一个DataSet)
  1174. /// </summary>
  1175. /// <param name="connection">数据库连接对象</param>
  1176. /// <param name="spName">存储过程名</param>
  1177. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1178. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1179. /// </param>
  1180. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1181. public static void FillDataset(SqlConnection connection, string spName,
  1182. DataSet dataSet, string[] tableNames,
  1183. params object[] parameterValues)
  1184. {
  1185. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  1186. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1187. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  1188.  
  1189. if ((parameterValues != null) && (parameterValues.Length > ))
  1190. {
  1191. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1192. AssignParameterValues(commandParameters, parameterValues);
  1193. FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
  1194. }
  1195. else
  1196. {
  1197. FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames);
  1198. }
  1199. }
  1200.  
  1201. /// <summary>
  1202. /// 执行SqlCommand (即返回一个DataSet,不带参数)对所提供的SqlTransaction 。
  1203. /// </summary>
  1204. /// <param name="transaction">有效的SqlTransaction对象</param>
  1205. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1206. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1207. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1208. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1209. /// </param>
  1210. public static void FillDataset(SqlTransaction transaction, CommandType commandType,
  1211. string commandText,
  1212. DataSet dataSet, string[] tableNames)
  1213. {
  1214. FillDataset(transaction, commandType, commandText, dataSet, tableNames, null);
  1215. }
  1216.  
  1217. /// <summary>
  1218. /// 执行SqlCommand (即返回一个DataSet)对所提供的SqlTransaction 。
  1219. /// </summary>
  1220. /// <param name="transaction">有效的SqlTransaction对象</param>
  1221. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1222. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1223. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1224. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1225. /// </param>
  1226. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1227. public static void FillDataset(SqlTransaction transaction, CommandType commandType,
  1228. string commandText, DataSet dataSet, string[] tableNames,
  1229. params SqlParameter[] commandParameters)
  1230. {
  1231. FillDataset(transaction.Connection, transaction, commandType, commandText, dataSet, tableNames, commandParameters);
  1232. }
  1233.  
  1234. /// <summary>
  1235. /// 使用存储过程执行SqlCommand (即返回一个DataSet)对所提供的SqlTransaction 。
  1236. /// </summary>
  1237. /// <param name="transaction">有效的SqlTransaction对象</param>
  1238. /// <param name="spName">存储过程</param>
  1239. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1240. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1241. /// </param>
  1242. /// <param name="parameterValues">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1243. public static void FillDataset(SqlTransaction transaction, string spName,
  1244. DataSet dataSet, string[] tableNames,
  1245. params object[] parameterValues)
  1246. {
  1247. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1248. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供一个打开的transaction", "transaction");
  1249. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1250. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  1251.  
  1252. if ((parameterValues != null) && (parameterValues.Length > ))
  1253. {
  1254. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1255. AssignParameterValues(commandParameters, parameterValues);
  1256.  
  1257. FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
  1258. }
  1259. else
  1260. {
  1261. FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames);
  1262. }
  1263. }
  1264.  
  1265. /// <summary>
  1266. /// 私有方法,执行的SqlCommand (即返回一个结果集)对指定的SqlTransaction和SqlConnection使用提供的参数。
  1267. /// </summary>
  1268. /// <param name="connection">数据库连接对象</param>
  1269. /// <param name="transaction">有效的SqlTransaction对象</param>
  1270. /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  1271. /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
  1272. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1273. /// <param name="tableNames">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)
  1274. /// </param>
  1275. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  1276. private static void FillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,
  1277. string commandText, DataSet dataSet, string[] tableNames,
  1278. params SqlParameter[] commandParameters)
  1279. {
  1280. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  1281. if (dataSet == null) throw new ArgumentNullException("dataSet不能为null");
  1282.  
  1283. SqlCommand command = new SqlCommand();
  1284. bool mustCloseConnection = true;
  1285. PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
  1286.  
  1287. using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
  1288. {
  1289.  
  1290. if (tableNames != null && tableNames.Length > )
  1291. {
  1292. string tableName = "Table";
  1293. for (int index = ; index < tableNames.Length; index++)
  1294. {
  1295. if (tableNames[index] == null || tableNames[index].Length == ) throw new ArgumentException("该tableNames参数必须包含一个表格中的字段,这里提供了一个值为空或空字符串.", "tableNames");
  1296. dataAdapter.TableMappings.Add(tableName, tableNames[index]);
  1297. tableName += (index + ).ToString();
  1298. }
  1299. }
  1300.  
  1301. dataAdapter.Fill(dataSet);
  1302. command.Parameters.Clear();
  1303. }
  1304.  
  1305. if (mustCloseConnection)
  1306. connection.Close();
  1307. }
  1308. #endregion
  1309.  
  1310. #region UpdateDataset
  1311. /// <summary>
  1312. /// 执行各自的命令为每个插入,更新或删除的行中的数据。
  1313. /// </summary>
  1314.  
  1315. /// <param name="insertCommand">插入的SqlCommand</param>
  1316. /// <param name="deleteCommand">删除的SqlCommand</param>
  1317. /// <param name="updateCommand">更新的SqlCommand</param>
  1318. /// <param name="dataSet">一个DataSet ,其中将载有结果</param>
  1319. /// <param name="tableName">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)</param>
  1320. public static void UpdateDataset(SqlCommand insertCommand, SqlCommand deleteCommand, SqlCommand updateCommand, DataSet dataSet, string tableName)
  1321. {
  1322. if (insertCommand == null) throw new ArgumentNullException("没有提供插入的SqlCommand");
  1323. if (deleteCommand == null) throw new ArgumentNullException("没有提供删除的SqlCommand");
  1324. if (updateCommand == null) throw new ArgumentNullException("没有提供更新的SqlCommand");
  1325. if (tableName == null || tableName.Length == ) throw new ArgumentNullException("没有提供tableName");
  1326.  
  1327. using (SqlDataAdapter dataAdapter = new SqlDataAdapter())
  1328. {
  1329. dataAdapter.UpdateCommand = updateCommand;
  1330. dataAdapter.InsertCommand = insertCommand;
  1331. dataAdapter.DeleteCommand = deleteCommand;
  1332.  
  1333. dataAdapter.Update(dataSet, tableName);
  1334.  
  1335. dataSet.AcceptChanges();
  1336. }
  1337. }
  1338. #endregion
  1339.  
  1340. #region CreateCommand
  1341. /// <summary>
  1342. /// 简化建立一个SQL命令对象,允许存储过程和可选的参数
  1343. /// </summary>
  1344. /// <param name="connection">有效的SqlConnection对象</param>
  1345. /// <param name="spName">存储过程</param>
  1346. /// <param name="sourceColumns">该数组将被用于创建表映射允许DataTables被引用的用户定义的名称(可能是实际的表名称)</param>
  1347. /// <returns>sql命令对象</returns>
  1348. public static SqlCommand CreateCommand(SqlConnection connection, string spName, params string[] sourceColumns)
  1349. {
  1350. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  1351. if (spName == null || spName.Length == ) throw new ArgumentNullException("存储过程名");
  1352.  
  1353. SqlCommand cmd = new SqlCommand(spName, connection);
  1354. cmd.CommandType = CommandType.StoredProcedure;
  1355.  
  1356. if ((sourceColumns != null) && (sourceColumns.Length > ))
  1357. {
  1358.  
  1359. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1360.  
  1361. for (int index = ; index < sourceColumns.Length; index++)
  1362. commandParameters[index].SourceColumn = sourceColumns[index];
  1363.  
  1364. AttachParameters(cmd, commandParameters);
  1365. }
  1366.  
  1367. return cmd;
  1368. }
  1369. #endregion
  1370.  
  1371. #region ExecuteNonQueryTypedParams
  1372. /// <summary>
  1373. /// 执行存储过程通过的SqlCommand (没有返回结果)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1374. /// </summary>
  1375. /// <param name="connectionString">数据库连接字符串</param>
  1376. /// <param name="spName">存储过程</param>
  1377. /// <param name="dataRow">储存参数值的DataRow.</param>
  1378. /// <returns>返回更新的行数</returns>
  1379. public static int ExecuteNonQueryTypedParams(String connectionString, String spName, DataRow dataRow)
  1380. {
  1381. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  1382. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程名");
  1383.  
  1384. if (dataRow != null && dataRow.ItemArray.Length > )
  1385. {
  1386. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  1387.  
  1388. AssignParameterValues(commandParameters, dataRow);
  1389.  
  1390. return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  1391. }
  1392. else
  1393. {
  1394. return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
  1395. }
  1396. }
  1397.  
  1398. /// <summary>
  1399. /// 执行存储过程通过的SqlCommand (没有返回结果)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1400. /// </summary>
  1401. /// <param name="connection">有效的SqlConnection对象</param>
  1402. /// <param name="spName">存储过程</param>
  1403. /// <param name="dataRow">储存参数值的DataRow.</param>
  1404. /// <returns>返回更新的行数</returns>
  1405. public static int ExecuteNonQueryTypedParams(SqlConnection connection, String spName, DataRow dataRow)
  1406. {
  1407. if (connection == null) throw new ArgumentNullException("没有提供SqlConnection对象");
  1408. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1409.  
  1410. if (dataRow != null && dataRow.ItemArray.Length > )
  1411. {
  1412.  
  1413. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1414.  
  1415. AssignParameterValues(commandParameters, dataRow);
  1416.  
  1417. return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
  1418. }
  1419. else
  1420. {
  1421. return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
  1422. }
  1423. }
  1424.  
  1425. /// <summary>
  1426. /// 执行存储过程通过的SqlCommand (没有返回结果)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1427. /// </summary>
  1428. /// <param name="transaction">有效的SqlTransaction对象</param>
  1429. /// <param name="spName">存储过程名</param>
  1430. /// <param name="dataRow">储存参数值的DataRow</param>
  1431. /// <returns>返回更新的行数</returns>
  1432. public static int ExecuteNonQueryTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
  1433. {
  1434. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1435. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供有连接的SqlTransaction对象", "transaction");
  1436. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1437.  
  1438. if (dataRow != null && dataRow.ItemArray.Length > )
  1439. {
  1440. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1441.  
  1442. AssignParameterValues(commandParameters, dataRow);
  1443.  
  1444. return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1445. }
  1446. else
  1447. {
  1448. return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
  1449. }
  1450. }
  1451. #endregion
  1452.  
  1453. #region ExecuteDatasetTypedParams
  1454. /// <summary>
  1455. ///执行预存程序通过的SqlCommand (返回DataSet)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1456. /// </summary>
  1457. /// <param name="connectionString">数据库连接字符串</param>
  1458. /// <param name="spName">存储过程名</param>
  1459. /// <param name="dataRow">储存参数值的DataRow</param>
  1460. /// <returns>返回结果集Dataset</returns>
  1461. public static DataSet ExecuteDatasetTypedParams(string connectionString, String spName, DataRow dataRow)
  1462. {
  1463. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  1464. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1465.  
  1466. if (dataRow != null && dataRow.ItemArray.Length > )
  1467. {
  1468. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  1469.  
  1470. AssignParameterValues(commandParameters, dataRow);
  1471.  
  1472. return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  1473. }
  1474. else
  1475. {
  1476. return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
  1477. }
  1478. }
  1479.  
  1480. /// <summary>
  1481. /// 执行预存程序通过的SqlCommand (返回DataSet)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1482. /// </summary>
  1483. /// <param name="connection">有效的SqlConnection对象</param>
  1484. /// <param name="spName">存储过程名</param>
  1485. /// <param name="dataRow">储存参数值的DataRow</param>
  1486. /// <returns>返回结果集Dataset</returns>
  1487. public static DataSet ExecuteDatasetTypedParams(SqlConnection connection, String spName, DataRow dataRow)
  1488. {
  1489. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  1490. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1491.  
  1492. if (dataRow != null && dataRow.ItemArray.Length > )
  1493. {
  1494. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1495.  
  1496. AssignParameterValues(commandParameters, dataRow);
  1497.  
  1498. return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
  1499. }
  1500. else
  1501. {
  1502. return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName);
  1503. }
  1504. }
  1505.  
  1506. /// <summary>
  1507. /// 执行预存程序通过的SqlCommand (返回DataSet)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1508. /// </summary>
  1509. /// <param name="transaction">有效的SqlTransaction对象</param>
  1510. /// <param name="spName">存储过程名</param>
  1511. /// <param name="dataRow">储存参数值的DataRow</param>
  1512. /// <returns>返回结果集Dataset</returns>
  1513. public static DataSet ExecuteDatasetTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
  1514. {
  1515. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1516. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供有连接的SqlTransaction对象", "transaction");
  1517. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1518.  
  1519. if (dataRow != null && dataRow.ItemArray.Length > )
  1520. {
  1521. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1522.  
  1523. AssignParameterValues(commandParameters, dataRow);
  1524.  
  1525. return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1526. }
  1527. else
  1528. {
  1529. return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
  1530. }
  1531. }
  1532.  
  1533. #endregion
  1534.  
  1535. #region ExecuteReaderTypedParams
  1536. /// <summary>
  1537. /// 执行预存程序通过的SqlCommand (返回SqlDataReader)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1538. /// </summary>
  1539. /// <param name="connectionString">数据库连接字符串</param>
  1540. /// <param name="spName">存储过程名</param>
  1541. /// <param name="dataRow">储存参数值的DataRow</param>
  1542. /// <returns>返回结果集SqlDataReader</returns>
  1543. public static SqlDataReader ExecuteReaderTypedParams(String connectionString, String spName, DataRow dataRow)
  1544. {
  1545. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  1546. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1547.  
  1548. if (dataRow != null && dataRow.ItemArray.Length > )
  1549. {
  1550.  
  1551. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  1552.  
  1553. AssignParameterValues(commandParameters, dataRow);
  1554.  
  1555. return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  1556. }
  1557. else
  1558. {
  1559. return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
  1560. }
  1561. }
  1562.  
  1563. /// <summary>
  1564. /// 执行预存程序通过的SqlCommand (返回SqlDataReader)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1565. /// </summary>
  1566. /// <param name="connection">有效的SqlConnection对象</param>
  1567. /// <param name="spName">存储过程名</param>
  1568. /// <param name="dataRow">储存参数值的DataRow</param>
  1569. /// <returns>返回结果集SqlDataReader</returns>
  1570. public static SqlDataReader ExecuteReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
  1571. {
  1572. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  1573. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1574.  
  1575. if (dataRow != null && dataRow.ItemArray.Length > )
  1576. {
  1577. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1578.  
  1579. AssignParameterValues(commandParameters, dataRow);
  1580.  
  1581. return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
  1582. }
  1583. else
  1584. {
  1585. return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName);
  1586. }
  1587. }
  1588.  
  1589. /// <summary>
  1590. /// 执行预存程序通过的SqlCommand (返回SqlDataReader)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1591. /// </summary>
  1592. /// <param name="transaction">有效的SqlTransaction对象</param>
  1593. /// <param name="spName">存储过程名</param>
  1594. /// <param name="dataRow">储存参数值的DataRow</param>
  1595. /// <returns>返回结果集SqlDataReader</returns>
  1596. public static SqlDataReader ExecuteReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
  1597. {
  1598. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1599. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供有连接的SqlTransaction对象.", "transaction");
  1600. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1601.  
  1602. if (dataRow != null && dataRow.ItemArray.Length > )
  1603. {
  1604. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1605.  
  1606. AssignParameterValues(commandParameters, dataRow);
  1607.  
  1608. return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1609. }
  1610. else
  1611. {
  1612. return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName);
  1613. }
  1614. }
  1615. #endregion
  1616.  
  1617. #region ExecuteScalarTypedParams
  1618. /// <summary>
  1619. /// 执行预存程序通过的SqlCommand (返回第一行第一列)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1620. /// </summary>
  1621. /// <param name="connectionString">数据库连接字符串</param>
  1622. /// <param name="spName">存储过程名</param>
  1623. /// <param name="dataRow">储存参数值的DataRow</param>
  1624. /// <returns>返回第一行第一列</returns>
  1625. public static object ExecuteScalarTypedParams(String connectionString, String spName, DataRow dataRow)
  1626. {
  1627. if (connectionString == null || connectionString.Length == ) throw new ArgumentNullException("没有提供数据库连接字符串");
  1628. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1629.  
  1630. if (dataRow != null && dataRow.ItemArray.Length > )
  1631. {
  1632. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
  1633.  
  1634. AssignParameterValues(commandParameters, dataRow);
  1635.  
  1636. return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
  1637. }
  1638. else
  1639. {
  1640. return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
  1641. }
  1642. }
  1643.  
  1644. /// <summary>
  1645. /// 执行预存程序通过的SqlCommand (返回第一行第一列)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1646. /// </summary>
  1647. /// <param name="connection">有效的SqlConnection对象</param>
  1648. /// <param name="spName">存储过程名</param>
  1649. /// <param name="dataRow">储存参数值的DataRow</param>
  1650. /// <returns>返回第一行第一列</returns>
  1651. public static object ExecuteScalarTypedParams(SqlConnection connection, String spName, DataRow dataRow)
  1652. {
  1653. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  1654. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1655.  
  1656. if (dataRow != null && dataRow.ItemArray.Length > )
  1657. {
  1658.  
  1659. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1660. AssignParameterValues(commandParameters, dataRow);
  1661.  
  1662. return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
  1663. }
  1664. else
  1665. {
  1666. return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName);
  1667. }
  1668. }
  1669.  
  1670. /// <summary>
  1671. /// 执行预存程序通过的SqlCommand (返回第一行第一列)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1672. /// </summary>
  1673. /// <param name="transaction">有效的SqlTransaction对象</param>
  1674. /// <param name="spName">存储过程名</param>
  1675. /// <param name="dataRow">储存参数值的DataRow.</param>
  1676. /// <returns>返回第一行第一列</returns>
  1677. public static object ExecuteScalarTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
  1678. {
  1679. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1680. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供有连接的SqlTransaction对象", "transaction");
  1681. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1682.  
  1683. if (dataRow != null && dataRow.ItemArray.Length > )
  1684. {
  1685. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1686.  
  1687. AssignParameterValues(commandParameters, dataRow);
  1688.  
  1689. return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1690. }
  1691. else
  1692. {
  1693. return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
  1694. }
  1695. }
  1696. #endregion
  1697.  
  1698. #region ExecuteXmlReaderTypedParams
  1699. /// <summary>
  1700. /// 执行预存程序通过的SqlCommand (返回XmlReader)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1701. /// </summary>
  1702. /// <param name="connection">有效的SqlConnection对象</param>
  1703. /// <param name="spName">存储过程名</param>
  1704. /// <param name="dataRow">储存参数值的DataRow.</param>
  1705. /// <returns>返回XmlReader</returns>
  1706. public static XmlReader ExecuteXmlReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
  1707. {
  1708. if (connection == null) throw new ArgumentNullException("没有提供数据库连接对象");
  1709. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1710.  
  1711. if (dataRow != null && dataRow.ItemArray.Length > )
  1712. {
  1713. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
  1714. AssignParameterValues(commandParameters, dataRow);
  1715.  
  1716. return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
  1717. }
  1718. else
  1719. {
  1720. return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
  1721. }
  1722. }
  1723.  
  1724. /// <summary>
  1725. /// 执行预存程序通过的SqlCommand (返回XmlReader)使用的DataRow列的值的存储过程的参数值。这种方法将查询数据库,发现参数的存储过程(第一次每一个存储过程被称为) ,并指定值的基础上连续值。
  1726. /// </summary>
  1727. /// <param name="transaction">有效的SqlTransaction对象</param>
  1728. /// <param name="spName">存储过程名</param>
  1729. /// <param name="dataRow">储存参数值的DataRow.</param>
  1730. /// <returns>返回XmlReader</returns>
  1731. public static XmlReader ExecuteXmlReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
  1732. {
  1733. if (transaction == null) throw new ArgumentNullException("没有提供SqlTransaction对象");
  1734. if (transaction != null && transaction.Connection == null) throw new ArgumentException("没有提供有连接的SqlTransaction对象.", "transaction");
  1735. if (spName == null || spName.Length == ) throw new ArgumentNullException("没有提供存储过程");
  1736.  
  1737. if (dataRow != null && dataRow.ItemArray.Length > )
  1738. {
  1739.  
  1740. SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
  1741. AssignParameterValues(commandParameters, dataRow);
  1742.  
  1743. return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
  1744. }
  1745. else
  1746. {
  1747. return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
  1748. }
  1749. }
  1750. #endregion
  1751.  
  1752. /// <summary>
  1753. /// 执行多条SQL语句,实现数据库事务。
  1754. /// </summary>
  1755. /// <param name="connectionString">多条SQL语句</param>
  1756. /// <param name="SQLStringList">多条SQL语句</param>
  1757. /// <returns>影响的记录数</returns>
  1758. public static int ExecuteSqlTran(string connectionString, List<String> SQLStringList)
  1759. {
  1760. using (SqlConnection conn = new SqlConnection(connectionString))
  1761. {
  1762. conn.Open();
  1763. SqlCommand cmd = new SqlCommand();
  1764. cmd.Connection = conn;
  1765. SqlTransaction tx = conn.BeginTransaction();
  1766. cmd.Transaction = tx;
  1767. try
  1768. {
  1769. int count = ;
  1770. for (int n = ; n < SQLStringList.Count; n++)
  1771. {
  1772. string strsql = SQLStringList[n];
  1773. if (strsql.Trim().Length > )
  1774. {
  1775. cmd.CommandText = strsql;
  1776. count += cmd.ExecuteNonQuery();
  1777. }
  1778. }
  1779. tx.Commit();
  1780. return count;
  1781. }
  1782. catch
  1783. {
  1784. tx.Rollback();
  1785. return ;
  1786. }
  1787. }
  1788. }
  1789.  
  1790. /// <summary>
  1791. /// 执行多条SQL语句,实现数据库事务。
  1792. /// </summary>
  1793. /// <param name="connectionString">泛型列</param>
  1794. /// <param name="SQLStringList">泛型列</param>
  1795. /// <returns>影响的记录数</returns>
  1796. public static int ExecuteSqlTran(string connectionString, List<CommandInfo> cmdList)
  1797. {
  1798. using (SqlConnection conn = new SqlConnection(connectionString))
  1799. {
  1800. conn.Open();
  1801. using (SqlTransaction trans = conn.BeginTransaction())
  1802. {
  1803. SqlCommand cmd = new SqlCommand();
  1804. cmd.Connection = conn;
  1805. cmd.Transaction = trans;
  1806. int count = ;
  1807. //循环
  1808. foreach (CommandInfo myDE in cmdList)
  1809. {
  1810. cmd.Parameters.Clear();
  1811. cmd.CommandText = myDE.CommandText;
  1812. cmd.CommandType = myDE.CommandType;
  1813. AttachParameters(cmd, myDE.Parameters);
  1814. try
  1815. {
  1816. int result = cmd.ExecuteNonQuery();
  1817. count += result;
  1818. }
  1819. catch
  1820. {
  1821. trans.Rollback();
  1822. return ;
  1823. }
  1824. }
  1825. trans.Commit();
  1826. return count;
  1827.  
  1828. }
  1829. }
  1830. }
  1831.  
  1832. /// <summary>
  1833. /// 执行多条SQL语句,实现数据库事务。
  1834. /// </summary>
  1835. /// <param name="connectionString">泛型列</param>
  1836. /// <param name="SQLStringList">泛型列</param>
  1837. /// <returns>影响的记录数</returns>
  1838. public static int ExecuteSqlTranWithException(string connectionString, List<CommandInfo> cmdList)
  1839. {
  1840. using (SqlConnection conn = new SqlConnection(connectionString))
  1841. {
  1842. conn.Open();
  1843. using (SqlTransaction trans = conn.BeginTransaction())
  1844. {
  1845. SqlCommand cmd = new SqlCommand();
  1846. cmd.Connection = conn;
  1847. cmd.Transaction = trans;
  1848. int count = ;
  1849. //循环
  1850. foreach (CommandInfo myDE in cmdList)
  1851. {
  1852. cmd.Parameters.Clear();
  1853. cmd.CommandText = myDE.CommandText;
  1854. cmd.CommandType = myDE.CommandType;
  1855. AttachParameters(cmd, myDE.Parameters);
  1856. try
  1857. {
  1858. int result = cmd.ExecuteNonQuery();
  1859. count += result;
  1860. }
  1861. catch (Exception ex)
  1862. {
  1863. trans.Rollback();
  1864. throw;
  1865. }
  1866. }
  1867. trans.Commit();
  1868. return count;
  1869.  
  1870. }
  1871. }
  1872. }
  1873.  
  1874. ///<summary>
  1875. ///直接通过DataSet更新数据库表
  1876. ///</summary>
  1877. ///<param name="ds"></param>
  1878. ///<param name="strTblName">ds中要更新的表名</param>
  1879. ///<param name="strConnection"></param>
  1880. ///<returns></returns>
  1881. public static int UpdateByDataSet(DataSet ds, string strTblName, string strConnection)
  1882. {
  1883.  
  1884. SqlConnection conn = new SqlConnection(strConnection);
  1885.  
  1886. SqlDataAdapter myAdapter = new SqlDataAdapter();
  1887. SqlCommand myCommand = new SqlCommand("select * from " + strTblName, conn);
  1888. myAdapter.SelectCommand = myCommand;
  1889. SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
  1890. return myAdapter.Update(ds, strTblName);
  1891. }
  1892.  
  1893. /// <summary>
  1894. /// 判断reader里是否存在列名
  1895. /// </summary>
  1896. /// <param name="reader"></param>
  1897. /// <param name="name"></param>
  1898. /// <returns></returns>
  1899. public static bool ContainsField(IDataReader reader, string name)
  1900. {
  1901. for (int i = ; i < reader.FieldCount; i++)
  1902. {
  1903. if (reader.GetName(i) == name)
  1904. return true;
  1905. }
  1906.  
  1907. return false;
  1908. }
  1909.  
  1910. }
  1. public class CommandInfo
  2. {
  3. private string _commandText;
  4. private CommandType _commandType;
  5.  
  6. public CommandType CommandType
  7. {
  8. get { return _commandType; }
  9. set { _commandType = value; }
  10. }
  11. public string CommandText
  12. {
  13. get { return _commandText; }
  14. set { _commandText = value; }
  15. }
  16. private SqlParameter[] _parameters;
  17.  
  18. public SqlParameter[] Parameters
  19. {
  20. get { return _parameters; }
  21. set { _parameters = value; }
  22. }
  23.  
  24. public CommandInfo(string sqlText, SqlParameter[] para, CommandType ct)
  25. {
  26. _commandText = sqlText;
  27. _parameters = para;
  28. _commandType = ct;
  29. }
  30. }

C# 数据操作工具类的更多相关文章

  1. 【手撸一个ORM】第十步、数据操作工具类 MyDb

    说明 其实就是数据库操作的一些封装,很久不用SqlCommand操作数据库了,看了点园子里的文章就直接上手写了,功能上没问题,但写法上是否完美高效无法保证,建议有需要的朋友自己重写,当然如果能把最佳实 ...

  2. [转载]C# FTP操作工具类

    本文转载自<C# Ftp操作工具类>,仅对原文格式进行了整理. 介绍了几种FTP操作的函数,供后期编程时查阅. 参考一: using System; using System.Collec ...

  3. DataTable操作工具类DataTableHelper

    DataTable操作工具类DataTableHelper. 功能介绍: 将泛型集合填充为数据表 将泛型填充为数据表 将对象集合填充为数据表 将对象填充为数据表 将定IDictionary数据转换为D ...

  4. 【转载】ASP.NET工具类:文件夹目录Directory操作工具类

    在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...

  5. Hbase 操作工具类

    依赖jar <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-cli ...

  6. java并发学习--第四章 JDK提供的线程原子性操作工具类

    在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS ...

  7. C#-ade.net-实体类、数据访问类

    实体类.数据访问类 是由封装演变而来,使对数据的访问更便捷,使用时只需要调用即可,无需再次编写代码 实体类是按照数据库表的结构封装起来的一个类 首先,新建文件夹 App_Code ,用于存放数据库类等 ...

  8. 我的DbHelper数据操作类

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...

  9. ado.net 实体类_数据访问类

    实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

随机推荐

  1. hdu 5272 Dylans loves numbers 水题

    Dylans loves numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem. ...

  2. linux 磁盘管理学习笔记

    磁盘管理命令:fdisk df du fdisk #查看硬盘分区表 df #查看分区使用情况 du #查看文件占用空间情况lvdisplay #逻辑分区 [1] 李洋.df.du.fdisk:Linu ...

  3. JS的加载方式---同步和异步

    同步加载及异步加载,只有这两种方式. 动态加载是异步加载的方式之一. ajax加载也是异步加载.

  4. andorid

    js内存泄露 三分面加七分水 —— 十分糊涂 膝盖上打瞌睡 —— 自己靠自己 不当家,不知柴米贵:不生子,不知父母恩. 水落现石头,日久见人心. sqllite http://wenku.baidu. ...

  5. WCF关于VS2010的配置

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE 下的 devenv.exe.config 在 <configura ...

  6. LeetCode38 Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  7. Load Balancing 折半枚举大法好啊

    Load Balancing 给出每个学生的学分.   将学生按学分分成四组,使得sigma (sumi-n/4)最小.         算法:   折半枚举 #include <iostrea ...

  8. [ASP.Net]TableLayoutPanel的使用

    以前都是使用Panel.没有用过其他容器类.郁闷,要控制界面的自适应真是麻烦.平常用一用dock.anchor差不多了,但是,更复杂的情景下,就没法了.例如一行有多个控件,有的要求跟据窗口缩放,只缩放 ...

  9. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

  10. django 用imagefiled访问图片

    使用FileField和ImageField时,我们有几个步骤: 在settings.py中设置MEDIA_ROOT和MEDIA_URL MEDIA_ROOT:一个绝对路径,Django根据它知道文件 ...