转 http://www.cnblogs.com/hcl0208/archive/2007/11/09/954160.html

RunProc.dll是一款提供针对.NET 2.0 + MSSQL2k(经简单测试,支持sql2005)环境下的存储过程调用的封装库,可支持不同类型的Proc应用,无论是带输入参数,输出参数,还是结果集合,[暂不支持return],它都可以帮你快速搞定,返回你想到的结果,而不需要考虑数据业务编码,只需不超过10行的代码,就可以完成你要打上至少30行,甚至50,100行的代码(因为,过多的参数,使你需要建立很多的Parameter对象)

由于执行库及调用比较简单,在此做一下代码演示并提供RunProc.dll库的免费下载应用,无限制,在不更改代码或反向工程的前期下,可随意传播

目前该Dll版本为1.0.0.3,目前支持SqlDataReader,DataTable数据集返回,支持的Sql数据类型:char,nchar,varchar,nvarchar,int,smallint,datetime,smalldatetime,float,text,bit.decimal其它数据类型正在更新中.

示例代码:

Proc:

ALTER procedure test
(
@a varchar(12),
@b int,
@c varchar(12) output,
@d int output
)
as
set @c=@a+'test ok'
set @d=@b+10
==以下为了测试返回数据集
Select * from table

C#
首先添加引用,将该dll加入到自已的项目中,
然后using SQL.RunProc
以下代码为没有返回任何数据集,只是单纯执行,并得到存贮过程的返回值

SqlConnection Conn = new SqlConnection(); //建立一个基本的MSSQL数据连接对象
Conn.ConnectionString = @"Data Source=127.0.0.1;database=Northwind;user id=sa;password=hacker;";//执行连接MSSQL字符串
RunProc a = new RunProc();//建立一个RunProc类的实例
a.Conn = Conn;//把数据连接提交给RunProc
a.ProcName = "test";//指定要查询执行的Proc的名称
a.Run("Test",100);//传递进去要输入的参数组,顺序于Proc定义声明的参数输入顺序一致,参数个数不限.
 //此处如果没有参数传入,可以直接a.Run();
//以上调用完毕,
//下面读取存贮过程的返回值,使用OutPut方法
Response.Write(a.OutPut["@c"] + "," + a.OutPut["@d"]);//测试输出返回值,OutPut是一个集合,里面可以通过指定返回值的变量名来获得其返回值

下面代码是有数据集返回的,

SqlConnection Conn = new SqlConnection(); //建立一个基本的MSSQL数据连接对象
Conn.ConnectionString = @"Data Source=127.0.0.1;database=Northwind;user id=sa;password=hacker;";//执行连接MSSQL字符串
RunProc a = new RunProc();//建立一个RunProc类的实例
a.Conn = Conn;//把数据连接提交给RunProc
a.ProcName = "test";//指定要查询执行的Proc的名称
a.IsReturnReader = true; //此属性用于指定所执行的存储过程是否具备返回结果集,默认为false,如果修改为true,则需要执行下面注释的一行代码,传递一个委托给RunDataRead属性,委托方法为void c1(SqlDataReader r);
a.RunDataRead = c1;//传递一个委托方法,无返回值,参数为SqlDataReader
a.Run("Neo",100);//参数列表,不限数据类型,但顺序必需与存贮过程输入参数顺序和个数保持一致.
Response.Write(a.OutPut["@c"] + "," + a.OutPut["@d"]);

private void c1(SqlDataReader R){
     while(R.Read()){
        Response.Write (R["name"].ToString());
        //读取数据表中的数据
     }
}

上面示例将同时执行,存贮过程执行,返回值,返回数据集.

RunProc属性:

Conn:将数据库连接交给runproc,执行完成后,runproc会自动关闭此连接

ProcName:存贮过程名称

IsReturnReader:指定该存贮过程是否返回SqlDataReader,默认值为false(执行不返回任何记录集的存贮过程),设定为true后,您必需委托一个处理SqlDataReader方法,该方法由RunDataRead指定,详见RunDataRead方法.

RunDataRead:委托一个处理SqlDataReader的方法,此方法只包含一个SqlDataReader类型的参数

IsReturnDataTable:指定该存贮过程是否返回DataTable,默认值为false(执行不返回任何记录集的存贮过程),设定为true后,您必需委托一个处理DataTable方法,该方法由OutDataTable指定,详见OutDataTable方法.

OutDataTable:委托一个处理DataTable的方法,此方法只包含一个DataTable类型的参数

IsReturnOutputByDataReader:设置在返回SqlDataReader的同时,是否返回Output参数值,当IsReturnReader设为true的时候,属性值会生效!默认值false!

IsExistPars:是否存在参数,包括输入输出参数,设为false时,将不对任何参数做处理.默认值为true,如果您的存贮过程不包含任何参数处理,请将该值设为true,这样会适当提升执行性能.

RunProc方法:

Run(params object[] Pars):执行runproc,参数为对应存贮过程的输入参数列表,注意个数与顺利,数据类型都必需对应!

该类对同时返回SqlDataReader和输出参数的处理并不好,还希望各位提出改进意见.

下载该文件

转载于:https://www.cnblogs.com/lhuser/articles/1891060.html

SqlServer 存贮过程操作类相关推荐

  1. 最强.NET SQLServer 操作类 SqlExecuteXY 源代码发布 使用教程文档

    这个类是自己写的,一直用了好久,个人感觉非常好用.常常繁琐的 SQL 操作 往往 一两条语句就能实现.而且性能卓越,不用考虑线程安全问题. 所以和大家分享下 并且还支持多库操作 源代码下载地址: ht ...

  2. c 连接oracle 通用类,c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6)

    当前位置:我的异常网» C# » c#操作oracle,有没有相仿sqlhelp之类的通用操作类 c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6) www.myexceptions ...

  3. java初始化实例化_Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  4. C# + MySql 存贮过程开发示例

    MySql 发展至今,已经不是当初那个只依靠免费和速度取胜的开源数据库服务器了,它提供的一系列 GUI 工具,以及加入商业数据库的一些特性,依然免费并且开源,让我们实在无法拒绝它的魅力. 很多人在谈及 ...

  5. Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  6. android 日期时间类,Android 时间与日期操作类

    获取本地日期与时间 public String getCalendar() { @SuppressLint("SimpleDateFormat") SimpleDateFormat ...

  7. 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

    1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...

  8. guava集合操作类的使用_使用Guava进行测试集合的实现

    guava集合操作类的使用 我目前正在为LibFX添加一项新功能,为此我创建了一些类似于Java Collections Framework的自定义集合. 我一直在寻找可以与之对抗的测试,并很高兴发现 ...

  9. jvm类加载过程_JVM类生命周期概述:加载时机与加载过程

    作者:菜鸟小于 https://www.cnblogs.com/Young111/p/11359700.html 一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描 ...

  10. C#通用类库--短信猫操作类1(原始AT命令)

    一个C#资源分享平台,专业分享学习高质量代码,每周期布置学习任务,激发学习C#兴趣!(QQ群:128874886)  关于C#操作短信猫的文章在博客园也有很多,其中个人认为比较专业的就是 给我一杯酒 ...

最新文章

  1. 研究优雅停机时的一点思考
  2. leaflet的入门开发(一)
  3. 为什么分类对象越多训练时间越长?
  4. 工业工程专业C语言,工欲善其事必先利其器——工业工程课程设置及其核心专业课简介...
  5. 排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时
  6. [20170612]FOR ALL COLUMNS SIZE repeat12c
  7. leetcode[81]Search in Rotated Sorted Array II
  8. java .jpackage_jpackage安装Java原生本机应用的新工具
  9. c语言pi算法程序,C语言计算圆周率PI
  10. 爬虫学习——爬虫之新浪新闻
  11. mysql 查连接数,查看MySQL的连接数
  12. 螺旋传动设计系统lisp_螺旋传动设计
  13. windows在此计算机上找不到系统映象,Win7下打开程序提示应用程序或dll 为无效的windows映像怎么办...
  14. NURBSglunurbssurface
  15. Navicat安装教程和评测
  16. 学习笔记——FPGA与CPLD的联系与区别
  17. JS 删除对象中的某个属性
  18. 新媒体运营人怎么做粉丝运营
  19. Torch的参数初始化
  20. 大数据工具kafka

热门文章

  1. 问答列表html,HTML这个样子的图文列表怎么写
  2. 容器技术Docker K8s 39 Serverless Kubernetes(ASK)详解-阿里云Serverless容器(ASK)适用场景与核心功能
  3. 单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
  4. 怎么解决IPA processing failed错误, 用xcode 11打包
  5. 正态分布下贝叶斯决策的特例(一)
  6. sqlalchemy连接和关闭数据库
  7. 平稳过程的各态历经性
  8. 努力在html中适配图片尝试失败
  9. sql 只要一个字段相同则只显示一条数据_sql 有一个字段内容重复的 只显示一条的方法...
  10. 【知识图谱系列】多关系异质图神经网络CompGCN