如何使用iBatis.NET检索存储过程的返回值?下面的代码成功调用了存储过程,但QueryForObject< int>呼叫返回0。
的SqlMap
<procedure id="MyProc" parameterMap="MyProcParameters" resultClass="int">
MyProc
</procedure>
<parameterMap id="MyProcParameters">
<parameter property="num"/>
</parameterMap>
C#代码
public int RunMyProc( string num )
{
return QueryForObject < int > ( "MyProc", new Hashtable { { "num", num } } );
}
存储过程
create procedure MyProc
@num nvarchar(512)
as
begin
return convert(int, @num)
end
仅供参考,我使用的是iBatis 1.6.1.0,.NET 3.5和SQL Server 2008.
答案 0 :(得分:1)
它不漂亮,但这有效:
<强>的SqlMap 强>
<statement id="MyProc" parameterClass="string" resultClass="int">
declare @num int
exec @num = MyProc #value#
select @num
</statement>
C#代码
public int RunMyProc( string num )
{
return QueryForObject < int > ( "MyProc", num );
}
答案 1 :(得分:1)
您可能需要查看以下文章 关于如何检索返回值的http://www.barebonescoder.com/2010/04/ibatis-net-stored-procedures-return-values/。
我在QueryForObject和Insert场景中使用它,其中最后一个语句是存储过程中的return语句。
特别注意“parameterMap”元素的class属性。它比上面的答案更漂亮,我相信它更符合IBatis.Net的使用方式。
答案 2 :(得分:0)
存储过程没有像函数一样的返回值 所以,我认为这不会起作用。请尝试使用输出参数。
答案 3 :(得分:0)
我不确定你的应用程序逻辑,但你的程序会更好:
create procedure MyProc
@num nvarchar(512)
as
begin
DECLARE @ReturnValue int
BEGIN TRY
SET @ReturnValue=convert(int, @num)
END TRY
BEGIN CATCH
SET @ReturnValue=0 --procedures can not return null, so set some default here
END CATCH
return @ReturnValue
end