Получение возвращаемого значения хранимой процедуры с помощью iBatis.NET - PullRequest
1 голос
/ 17 марта 2010

Как я могу получить возвращаемое значение хранимой процедуры, используя iBatis.NET? Приведенный ниже код успешно вызывает хранимую процедуру, но вызов QueryForObject возвращает 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 ]

1 голос
/ 05 апреля 2011

Возможно, вы захотите проверить следующую статью http://www.barebonescoder.com/2010/04/ibatis-net-stored-procedures-return-values/ о том, как получить возвращаемые значения.

Я использовал его в сценариях QueryForObject и Insert, где последний оператор является оператором возврата в хранимой процедуре.

Обратите особое внимание на атрибут класса в элементе "parameterMap". Это намного красивее, чем ответ выше, и я считаю, что это больше соответствует тому, как IBatis.Net предназначался для использования.

1 голос
/ 17 марта 2010

Это не красиво, но это работает:

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 );
}
0 голосов
/ 17 марта 2010

Я не уверен в логике вашего приложения, но ваша процедура будет лучше, как это:

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
0 голосов
/ 17 марта 2010

Хранимые процедуры не имеют возвращаемого значения, как функции.
Так что я не думаю, что это сработает. Попробуйте вместо этого использовать выходные параметры.

...