在项目中写了一个存储过程:
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;
就这样程序就得到存储过程中的返回值。
问题解决!
http://www.cnblogs.com/Charles2008/archive/2012/04/16/StoreProc_ReturnValue.html