using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Collections;
using System.Data;

// 摘要:数据访问助手。
// 作者:ZhiQiao
// 日期:2008/07/02

namespace ZhiQiao.DataAccessHelper
{
    // 存储过程调用助手。
    public class StoreProcedure
    {
        // 存储过程名称。
        private string _name;
        // 数据库连接字符串。
        private string _conStr;

// 构造函数
         // sprocName: 存储过程名称;
         // conStr: 数据库连接字符串。
        public StoreProcedure(string sprocName, string conStr) {
            _conStr = conStr;
            _name = sprocName;
        }
        
        //  执行存储过程,不返回值。
         //  paraValues: 参数值列表。
         //  return: void
        public void ExecuteNoQuery(params object[] paraValues) {
            using (SqlConnection con = new SqlConnection(_conStr)) {
                SqlCommand comm = new SqlCommand(_name, con);
                comm.CommandType = CommandType.StoredProcedure;

AddInParaValues(comm, paraValues);

con.Open();
                comm.ExecuteNonQuery();
                con.Close();
            }
        }
        
        // 执行存储过程返回一个表。
         // paraValues: 参数值列表。
         // return: DataTable
        public DataTable ExecuteDataTable(params object[] paraValues) {
            SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr));
            comm.CommandType = CommandType.StoredProcedure;
            AddInParaValues(comm, paraValues);

SqlDataAdapter sda = new SqlDataAdapter(comm);
            DataTable dt = new DataTable();
            sda.Fill(dt);

return dt;
        }
       
        // 执行存储过程,返回SqlDataReader对象,
         // 在SqlDataReader对象关闭的同时,数据库连接自动关闭。
         // paraValues: 要传递给给存储过程的参数值类表。
         // return: SqlDataReader
        public SqlDataReader ExecuteDataReader(params object[] paraValues) {
            SqlConnection con = new SqlConnection(_conStr);
            SqlCommand comm = new SqlCommand(_name, con);
            comm.CommandType = CommandType.StoredProcedure;
            AddInParaValues(comm, paraValues);
            con.Open();
            return comm.ExecuteReader(CommandBehavior.CloseConnection);
        }

// 获取存储过程的参数列表。
        private ArrayList GetParas() {
            SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90", 
                       new SqlConnection(_conStr));
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddWithValue("@procedure_name", (object)_name);
            SqlDataAdapter sda = new SqlDataAdapter(comm);

DataTable dt = new DataTable();
            sda.Fill(dt);

ArrayList al = new ArrayList();
            for (int i = 0; i < dt.Rows.Count; i++) {
                al.Add(dt.Rows[i][3].ToString());
            }
            return al;
        }

// 为 SqlCommand 添加参数及赋值。
        private void AddInParaValues(SqlCommand comm, params object[] paraValues) {
            comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int));
            comm.Parameters["@RETURN_VALUE"].Direction = 
                           ParameterDirection.ReturnValue;
            if (paraValues != null) {
                ArrayList al = GetParas();
                for (int i = 0; i < paraValues.Length; i++) {
                    comm.Parameters.AddWithValue(al[i + 1].ToString(), 
                         paraValues[i]);
                }
            }
        }
    }
}

转载于:https://www.cnblogs.com/JoeDZ/archive/2008/07/07/1237476.html

C#调用存储过程的通用类相关推荐

  1. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  2. oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇)

    先对上一篇调用SQLServer的存储过程作一点补充,就是如果存储过程里有Insert,update,delete等操作,最后返回结果集,按示例代码有可能得不到数据,因为返回的数据有可能不在第一个结果 ...

  3. 通过hibernate去调用存储过程

    为了在 Hibernate 中使用存储过程,你必须遵循一些规则.不遵循这些规则的存储过程将不可用.如果你仍然想使用他们,你必须通过 session.connection() 来执行他们.这些规则针对于 ...

  4. hibernate4调用mysql存储过程_hibernate调用存储过程

    一. 建表与初始化数据 在mysql的test数据库中建立一张新表:tbl_user,建表语句如下: DROP TABLE IF EXISTS `user`; CREATE TABLE `tbl_us ...

  5. 通用权限管理系统组件 给信息管理系统加一个初始化的功能,调用存储过程

    系统初始化的运行效果如下: 参数表是为了防止反复被初始化的,防止关键数据丢失. 其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下. 首先写了一个存 ...

  6. 通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程...

    系统初始化的运行效果如下: 参数表是为了防止反复被初始化的,防止关键数据丢失. 其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下. 首先写了一个存 ...

  7. DM8 jdbc调用存储过程传参list<实体类>

    DM8 jdbc调用存储过程传参list<实体类> 一.前提 jdbc的连接串参数prepareOptimize,表示是否对预编译SQL做优化,取值true/false,默认false不开 ...

  8. C#调用存储过程的类

    using System; using System.IO; using System.Data; using System.Data.SqlClient; using System.Configur ...

  9. 使用 CallableStatement 接口调用存储过程

    CallableStatement 接口的引入 CallableStatement 主要是调用数据库中的存储过程,CallableStatement 也是 Statement 接口的子接口.在使用 C ...

最新文章

  1. 集成Lucene和HBase(转)
  2. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
  3. ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)
  4. ASP.NET 5 入门 (3) – Logging
  5. 使用数组操作解码YOLO Core ML对象检测(三)
  6. windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
  7. JDK及Eclipse下载安装教程
  8. 汇编语言INC DEC JGE JG JLE JL JNE JE 都是什么意思
  9. linux 透明图片,FreeImage 生成带透明通道的GIF
  10. A.B.C类地址的私有地址、局域网地址、保留地址
  11. 运用Excel实现描述性统计分析
  12. simulink的pid参数自整定
  13. 过渡矩阵、线性变换矩阵在对应基下坐标的求法
  14. cad2010背景怎么调成黑色_3D错觉立体画到底是怎么画出来的?
  15. Spring学习笔记-C7-SpringMVC高级技术
  16. [Azure - VM] 解决办法:无法通过SSH连接VM,解决错误:This service allows sftp connections only.
  17. tcp 与udp 的区别
  18. 统计学中基础概念说明
  19. 解决:Win11蓝牙鼠标经常断连问题(亲测有效)
  20. cell-blog 功能介绍与安装

热门文章

  1. mysql查询表字段是否存在_Mysql判断表字段或索引是否存在
  2. oracle opaque_transform,oracle databse link
  3. 【编译原理】文法分类
  4. mods文件夹怎么创建_TCL电视怎么安装蜜蜂视频通用教程
  5. 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)
  6. 51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
  7. torque安装笔记
  8. 2种IO并发开发中的设计模式:Reactor and Proactor
  9. C++笔记——.和::和:和-的区别
  10. 【语义分割】OCRNet:Object-Context Representations for Semantic Segmentation