SqlServer 存贮过程操作类

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和输出参数的处理并不好,还希望各位提出改进意见.





下载该文件

posted @ 2010-11-29 14:31  Daniel_Lu  阅读(201)  评论(0编辑  收藏  举报