1

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

4 回答 4

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 );
}
于 2010-03-17T14:13:56.040 回答
1

您可能想查看以下 关于如何检索返回值的文章http://www.barebonescoder.com/2010/04/ibatis-net-stored-procedures-return-values/ 。

我在 QueryForObject 和 Insert 场景中使用过它,其中最后一条语句是存储过程中的返回语句。

请特别注意“parameterMap”元素上的类属性。它比上面的答案漂亮得多,我相信它更符合 IBatis.Net 的预期使用方式。

于 2011-04-05T09:51:24.753 回答
0

存储过程没有像函数那样的返回值。
所以,我认为这行不通。尝试改用输出参数。

于 2010-03-17T14:07:43.453 回答
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
于 2010-03-17T14:13:46.270 回答