CharlesChen's Technical Space

简单实用是我一直在软件开发追求的目标(I Focus on. Net technology, to make the greatest efforts to enjoy the best of life.)
Not the best, only better
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

存储过程返回值及输出参数笔记

Posted on 2012-04-16 17:25  Charles Chen  阅读(7117)  评论(0编辑  收藏  举报

      在项目中写了一个存储过程:    

Create PROCEDURE [dbo].[****] @ParkingAddress nvarchar(50) AS
BEGIN
insert into table(ParkingAddress)
values(@ParkingAddress)
END
if(@@rowcount>0)
return 1
else
return 0
     在程序中我需要调用这个存储过程并且得到它的返回值。因此需要获取该存储过程的返回值。在程序中我通过SqlCommand中的ExecuteNonQuery方法调用成功后,一时不知道怎么得到它的返回值。(没有用output输出参数),故查了些资料得到了解决方案,下面是一些记录,这里整理在一起,便于以后查找方便。

     要点:output是在存储过程中的参数的返回值(输出参数),而ReturnValue是存储过程返回的值(使用return关键字),一个存储过程可以有任意多个依靠参数返回的值,但只有一个ReturnValue。

一、获取存储过程的返回值--通过查询分析器获得
     存储过程大体分成三类:

1、返回记录集的存储过程:执行结果是一个记录集,例如,从数据库中检索出符合某一个或几个条件的记录。

2、返回数值得的存储过程(也可称为标量存储过程),其执行完后返回一个值,例如数据库中执行一个有返回值的函数或命令。

3、行为存储过程,用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。

另外:含有return的存储过程其返回值为return返回的那个值。

没有return的存储过程,无论执行结果又无结果集,其返回值都是0,

带有输出参数的存储过程,如果有RETURN则返回RETURN返回的那个值,如果要SELECT输出参数,则出现输出参数的值,和有无RETURN无关。

二、获取存储过程的返回值--通过程序获得

SqlParameter[] cmdParms = { .. ,new SqlParameter("@return",SqlDbType.Int)};
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.ReturnValue;或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Output或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Input;

得到返回值 object obj = cmdParms[cmdParms.Length - 1].Value;

根据上面的思路,最后在项目中通过 

            SqlParameter p = new SqlParameter("@ReturnValue", SqlDbType.Int);//这里的@ReturnValue可以根据需要自己命名,如果不命名系统将提供默认的一个名称。
            p.Direction = ParameterDirection.ReturnValue;

            SqlCommand.Parameters.Add(P);

            SqlCommand.ExecuteNonQuery();

            object obj=SqlCommand.Parameters["ReturnValue"].Value;

 就这样程序就得到存储过程中的返回值。

问题解决!