C#存储过程调用通用类(改进)
来源:互联网 发布:淘宝卖家应用 编辑:程序博客网 时间:2024/06/09 01:10
C#存储过程调用通用类(改进)
namespace Kenwood.Product.DataAccessHelper
{
using System;
using System.Data;
using System.Data.SqlClient;
//// <summary>
/// 存储过程。
/// </summary>
public class StoreProcedure
{
// 连接字符串。
private string connectionString;
// 存储过程名称。
private string storeProcedureName;
//// <summary>
/// 初始化 DataAccessHelper.StoreProceduer 对象。
/// </summary>
/// <param name="connectionString">数据库连接字符串。</param>
public StoreProcedure(string connectionString) {
this.connectionString = connectionString;
}
//// <summary>
/// 初始化 DataAccessHelper.StoreProceduer 对象。
/// </summary>
/// <param name="connectionString">数据库连接字符串。</param>
/// <param name="storeProcedureName">存储过程名称。</param>
public StoreProcedure(string connectionString, string storeProcedureName) {
this.connectionString = connectionString;
this.storeProcedureName = storeProcedureName;
}
//// <summary>
/// 获取或设置存储过程名称。
/// </summary>
public string StoreProcedureName {
get { return this.storeProcedureName; }
set { this.storeProcedureName = value; }
}
//// <summary>
/// 执行操作类(Insert/Delete/Update)存储过程。
/// </summary>
/// <param name="paraValues">传递给存储过程的参数值列表。</param>
/// <returns>受影响的行数。</returns>
public int ExecuteNonQuery(params object[] paraValues) {
using (SqlConnection connection = new SqlConnection(this.connectionString)) {
SqlCommand command = this.CreateSqlCommand(connection);
try {
this.DeriveParameters(command);
this.AssignParameterValues(command, paraValues);
connection.Open();
int affectedRowsCount = command.ExecuteNonQuery();
return affectedRowsCount;
} catch {
throw;
}
}
}
//// <summary>
/// 执行存储过程,返回 System.Data.DataTable。
/// </summary>
/// <param name="paraValues">传递给存储过程的参数值列表。</param>
/// <returns>包含查询结果的 System.Data.DataTable。</returns>
public DataTable ExecuteDataTable(params object[] paraValues) {
using (SqlConnection connection = new SqlConnection(this.connectionString)) {
SqlCommand command = this.CreateSqlCommand(connection);
try {
this.DeriveParameters(command);
this.AssignParameterValues(command, paraValues);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
} catch {
throw;
}
}
}
//// <summary>
/// 执行存储过程,填充指定的 System.Data.DataTable。
/// </summary>
/// <param name="dataTable">用于填充查询结果的 System.Data.DataTable。</param>
/// <param name="paraValues">传递给存储过程的参数值列表。</param>
public void ExecuteFillDataTable(DataTable dataTable, params object[] paraValues) {
using (SqlConnection connection = new SqlConnection(this.connectionString)) {
SqlCommand command = this.CreateSqlCommand(connection);
try {
this.DeriveParameters(command);
this.AssignParameterValues(command, paraValues);
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dataTable);
} catch {
throw;
}
}
}
//// <summary>
/// 执行存储过程返回 System.Data.SqlClient.SqlDataReader,
/// 在 System.Data.SqlClient.SqlDataReader 对象关闭时,数据库连接自动关闭。
/// </summary>
/// <param name="paraValues">传递给存储过程的参数值列表。</param>
/// <returns>包含查询结果的 System.Data.SqlClient.SqlDataReader 对象。</returns>
public SqlDataReader ExecuteDataReader(params object[] paraValues) {
using (SqlConnection connection = new SqlConnection(this.connectionString)) {
SqlCommand command = this.CreateSqlCommand(connection);
try {
this.DeriveParameters(command);
this.AssignParameterValues(command, paraValues);
connection.Open();
return command.ExecuteReader(CommandBehavior.CloseConnection);
} catch {
throw;
}
}
}
//// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="paraValues">传递给存储过程的参数值列表。</param>
/// <returns>结果集中第一行的第一列或空引用(如果结果集为空)。</returns>
public object ExecuteScalar(params object[] paraValues) {
using (SqlConnection connection = new SqlConnection(this.connectionString)) {
SqlCommand command = this.CreateSqlCommand(connection);
try {
this.DeriveParameters(command);
this.AssignParameterValues(command, paraValues);
connection.Open();
return command.ExecuteScalar();
} catch {
throw;
}
}
}
//// <summary>
/// 从在 System.Data.SqlClient.SqlCommand 中指定的存储过程中检索参数信息并填充指定的
/// System.Data.SqlClient.SqlCommand 对象的 System.Data.SqlClient.SqlCommand.Parameters 集 合。
/// </summary>
/// <param name="sqlCommand">将从其中导出参数信息的存储过程的 System.Data.SqlClient.SqlCommand 对象。</param>
internal void DeriveParameters(SqlCommand sqlCommand) {
try {
sqlCommand.Connection.Open();
SqlCommandBuilder.DeriveParameters(sqlCommand);
sqlCommand.Connection.Close();
} catch {
if (sqlCommand.Connection != null) {
sqlCommand.Connection.Close();
}
throw;
}
}
// 用指定的参数值列表为存储过程参数赋值。
private void AssignParameterValues(SqlCommand sqlCommand, params object[] paraValues) {
if (paraValues != null) {
if ((sqlCommand.Parameters.Count - 1) != paraValues.Length) {
throw new ArgumentNullException("The number of parameters does not match number of values for stored procedure.");
}
for (int i = 0; i < paraValues.Length; i++) {
sqlCommand.Parameters[i + 1].Value = (paraValues[i] == null) ? DBNull.Value : paraValues[i];
}
}
}
// 创建用于执行存储过程的 SqlCommand。
private SqlCommand CreateSqlCommand(SqlConnection connection) {
SqlCommand command = new SqlCommand(this.storeProcedureName, connection);
command.CommandType = CommandType.StoredProcedure;
return command;
}
}
}
- C#存储过程调用通用类(改进)
- C#存储过程调用通用类(改进)
- C#存储过程调用通用类
- C#存储过程调用通用类
- C#调用存储过程通用类
- C#调用存储过程的通用类
- C#调用存储过程的通用类
- C#调用存储过程的通用类
- C#调用存储过程的通用类
- C#调用存储过程的通用类
- C#调用存储过程的通用类
- c# asp.net winform 调用存储过程的通用类
- C#调用存储过程的通用方法
- 一个通用的存储过程调用类
- c# 执行存储过程的通用类
- C#调用存储过程
- C#调用存储过程
- C#调用存储过程
- VC2005中MFC程序的部署问题
- Bugzilla迁移导致无法新增项目版本号 product version
- sqlserver与c#中数据类型的对应关系
- 3.9 t
- 关于UrlRewite之后postback地址被还原的问题的解决方法
- C#存储过程调用通用类(改进)
- 漫谈.Net中的自动垃圾收集(GarbageCollection)机制
- 有效编程的75条军规
- Core j2EE Pattern, BO, TO, VO,
- IoC理论控制反转
- 图片和传真查看器 打开图片 速度慢
- 为什么关注命令行
- 深入SQL之merge into
- div+css实现table布局