使用iBatis.NET获取存储过程的返回值

时间:2010-03-17 13:56:03

标签: sql-server-2008 stored-procedures return-value ibatis.net

如何使用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.

4 个答案:

答案 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