Question

Comment puis-je récupérer la valeur de retour d'une procédure stockée à l'aide iBatis.NET? Le code ci-dessous appelle avec succès la procédure stockée, mais l'appel QueryForObject retourne 0.

SqlMap

<procedure id="MyProc" parameterMap="MyProcParameters" resultClass="int">
    MyProc
</procedure>

<parameterMap id="MyProcParameters">
    <parameter property="num"/>
</parameterMap>

code C #

public int RunMyProc( string num )
{
    return QueryForObject < int > ( "MyProc", new Hashtable { { "num", num } } );
}

procédure stockée

create procedure MyProc
    @num nvarchar(512)
as
begin
    return convert(int, @num)
end

Pour votre information, j'utilise iBatis 1.6.1.0, .NET 3.5 et SQL Server 2008.

Était-ce utile?

La solution

Il est pas joli, mais cela fonctionne:

SqlMap

<statement id="MyProc" parameterClass="string" resultClass="int">
    declare @num int
    exec @num = MyProc #value#
    select @num
</statement>

code C #

public int RunMyProc( string num )
{
    return QueryForObject < int > ( "MyProc", num );
}

Autres conseils

Vous pouvez consulter l'article suivant http://www.barebonescoder.com/2010/ 04 / ibatis-net-emmagasinées procédures de retour des valeurs / sur la façon de récupérer les valeurs de retour.

Je l'ai utilisé dans QueryForObject et insérez des scénarios où la dernière déclaration est une déclaration de retour dans la procédure stockée.

Portez une attention particulière à l'attribut class sur l'élément « parameterMap ». Il est beaucoup plus jolie que la réponse ci-dessus et je crois qu'il est plus en ligne avec la façon dont IBatis.Net était destiné à être utilisé.

Les procédures stockées ne sont pas une valeur de retour comme des fonctions.
Donc, je ne pense pas que cela fonctionnera. Essayez d'utiliser des paramètres de sortie à la place.

Je ne suis pas sûr de votre logique d'application, mais votre procédure serait mieux comme ceci:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top