C#存储过程调用通用类

  1. namespace Kenwood.Product.DataAccessHelper
  2. {
  3.     using System;
  4.     using System.Data;
  5.     using System.Data.SqlClient;
  6.     
  7.      <summary>
  8.     /// 存储过程。
  9.     /// </summary>
  10.     public class StoreProcedure
  11.     {
  12.         // 连接字符串。
  13.         private string connectionString;
  14.         // 存储过程名称。
  15.         private string storeProcedureName;
  16.          <summary>
  17.         /// 初始化 DataAccessHelper.StoreProceduer 对象。
  18.         /// </summary>
  19.         /// <param name="connectionString">数据库连接字符串。</param>
  20.         public StoreProcedure(string connectionString) {
  21.             this.connectionString = connectionString;
  22.         }
  23.          <summary>
  24.         /// 初始化 DataAccessHelper.StoreProceduer 对象。
  25.         /// </summary>
  26.         /// <param name="connectionString">数据库连接字符串。</param>
  27.         /// <param name="storeProcedureName">存储过程名称。</param>
  28.         public StoreProcedure(string connectionString, string storeProcedureName) {
  29.             this.connectionString = connectionString;
  30.             this.storeProcedureName = storeProcedureName;
  31.         }
  32.          <summary>
  33.         /// 获取或设置存储过程名称。
  34.         /// </summary>
  35.         public string StoreProcedureName {
  36.             get { return this.storeProcedureName; }
  37.             set { this.storeProcedureName = value; }
  38.         }
  39.          <summary>
  40.         /// 执行操作类(Insert/Delete/Update)存储过程。
  41.         /// </summary>
  42.         /// <param name="paraValues">传递给存储过程的参数值列表。</param>
  43.         /// <returns>受影响的行数。</returns>
  44.         public int ExecuteNonQuery(params object[] paraValues) {
  45.             using (SqlConnection connection = new SqlConnection(this.connectionString)) {
  46.                 SqlCommand command = this.CreateSqlCommand(connection);
  47.                 try {
  48.                     this.DeriveParameters(command);
  49.                     this.AssignParameterValues(command, paraValues);
  50.                     connection.Open();
  51.                     int affectedRowsCount = command.ExecuteNonQuery();
  52.                     return affectedRowsCount;
  53.                 } catch {
  54.                     throw;
  55.                 }
  56.             }
  57.         }
  58.          <summary>
  59.         /// 执行存储过程,返回 System.Data.DataTable。
  60.         /// </summary>
  61.         /// <param name="paraValues">传递给存储过程的参数值列表。</param>
  62.         /// <returns>包含查询结果的 System.Data.DataTable。</returns>
  63.         public DataTable ExecuteDataTable(params object[] paraValues) {
  64.             using (SqlConnection connection = new SqlConnection(this.connectionString)) {
  65.                 SqlCommand command = this.CreateSqlCommand(connection);
  66.                 try {
  67.                     this.DeriveParameters(command);
  68.                     this.AssignParameterValues(command, paraValues);
  69.                     SqlDataAdapter adapter = new SqlDataAdapter(command);
  70.                     DataTable dataTable = new DataTable();
  71.                     adapter.Fill(dataTable);
  72.                     return dataTable;
  73.                 } catch {
  74.                     throw;
  75.                 }
  76.             }
  77.         }
  78.          <summary>
  79.         /// 执行存储过程,填充指定的 System.Data.DataTable。
  80.         /// </summary>
  81.         /// <param name="dataTable">用于填充查询结果的 System.Data.DataTable。</param>
  82.         /// <param name="paraValues">传递给存储过程的参数值列表。</param>
  83.         public void ExecuteFillDataTable(DataTable dataTable, params object[] paraValues) {
  84.             using (SqlConnection connection = new SqlConnection(this.connectionString)) {
  85.                 SqlCommand command = this.CreateSqlCommand(connection);
  86.                 try {
  87.                     this.DeriveParameters(command);
  88.                     this.AssignParameterValues(command, paraValues);
  89.                     connection.Open();
  90.                     SqlDataAdapter adapter = new SqlDataAdapter(command);
  91.                     adapter.Fill(dataTable);
  92.                 } catch {
  93.                     throw;
  94.                 }
  95.             }
  96.         }
  97.         
  98.          <summary>
  99.         /// 执行存储过程返回 System.Data.SqlClient.SqlDataReader,
  100.         /// 在 System.Data.SqlClient.SqlDataReader 对象关闭时,数据库连接自动关闭。
  101.         /// </summary>
  102.         /// <param name="paraValues">传递给存储过程的参数值列表。</param>
  103.         /// <returns>包含查询结果的 System.Data.SqlClient.SqlDataReader 对象。</returns>
  104.         public SqlDataReader ExecuteDataReader(params object[] paraValues) {
  105.             using (SqlConnection connection = new SqlConnection(this.connectionString)) {
  106.                 SqlCommand command = this.CreateSqlCommand(connection);
  107.                 try {
  108.                     this.DeriveParameters(command);
  109.                     this.AssignParameterValues(command, paraValues);
  110.                     connection.Open();
  111.                     return command.ExecuteReader(CommandBehavior.CloseConnection);
  112.                 } catch {
  113.                     throw;
  114.                 }
  115.             }
  116.         }
  117.          <summary>
  118.         /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
  119.         /// </summary>
  120.         /// <param name="paraValues">传递给存储过程的参数值列表。</param>
  121.         /// <returns>结果集中第一行的第一列或空引用(如果结果集为空)。</returns>
  122.         public object ExecuteScalar(params object[] paraValues) {
  123.             using (SqlConnection connection = new SqlConnection(this.connectionString)) {
  124.                 SqlCommand command = this.CreateSqlCommand(connection);
  125.                 try {
  126.                     this.DeriveParameters(command);
  127.                     this.AssignParameterValues(command, paraValues);
  128.                     connection.Open();
  129.                     return command.ExecuteScalar();
  130.                 } catch {
  131.                     throw;
  132.                 }
  133.             }
  134.         }
  135.          <summary>
  136.         /// 从在 System.Data.SqlClient.SqlCommand 中指定的存储过程中检索参数信息并填充指定的 
  137.         /// System.Data.SqlClient.SqlCommand 对象的 System.Data.SqlClient.SqlCommand.Parameters 集  合。
  138.         /// </summary>
  139.         /// <param name="sqlCommand">将从其中导出参数信息的存储过程的 System.Data.SqlClient.SqlCommand 对象。</param>
  140.         internal void DeriveParameters(SqlCommand sqlCommand) {
  141.             try {
  142.                 sqlCommand.Connection.Open();
  143.                 SqlCommandBuilder.DeriveParameters(sqlCommand);
  144.                 sqlCommand.Connection.Close();
  145.             } catch {
  146.                 if (sqlCommand.Connection != null) {
  147.                     sqlCommand.Connection.Close();
  148.                 }
  149.                 throw;
  150.             }
  151.         }
  152.         // 用指定的参数值列表为存储过程参数赋值。
  153.         private void AssignParameterValues(SqlCommand sqlCommand, params object[] paraValues) {
  154.             if (paraValues != null) {
  155.                 if ((sqlCommand.Parameters.Count - 1) != paraValues.Length) {
  156.                     throw new ArgumentNullException("The number of parameters does not match number of values for stored procedure.");
  157.                 }
  158.                 for (int i = 0; i < paraValues.Length; i++) {
  159.                     sqlCommand.Parameters[i + 1].Value = (paraValues[i] == null) ? DBNull.Value : paraValues[i];
  160.                 }
  161.             }
  162.         }
  163.         // 创建用于执行存储过程的 SqlCommand。
  164.         private SqlCommand CreateSqlCommand(SqlConnection connection) {
  165.             SqlCommand command = new SqlCommand(this.storeProcedureName, connection);
  166.             command.CommandType = CommandType.StoredProcedure;
  167.             return command;
  168.         }
  169.     }
  170. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值