En utilisant Dapper.net pour appeler la procédure stockée, renvoyez toujours -1 en arrière

dapper sql-server sql-server-2008 stored-procedures

Question

voici ma procédure stockée. quand je le teste, obtenez toujours un résultat correct.

ALTER PROCEDURE [dbo].[AddSmoothieIngredients]
    -- Add the parameters for the stored procedure here
    @Query NVARCHAR(4000) ,
    @SmoothieId INT ,
    @CreatedDate DATETIME ,
    @Status INT ,
    @UserId INT
AS 
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
        SET NOCOUNT ON;

        BEGIN TRY
            BEGIN TRAN

            IF @SmoothieId > 0 
                BEGIN
                    DELETE  FROM dbo.SmoothieIngredients
                    WHERE   SmoothieId = @SmoothieId;

                    EXECUTE (@Query);
                END
            ELSE 
                BEGIN

                    IF @UserId = 0 
                        SET @UserId = NULL;

                    INSERT  INTO dbo.Smoothie
                            ( Name, CreatedDate, Status, UserId )
                    VALUES  ( N'', @CreatedDate, @Status, @UserId );

                    SET @SmoothieId = SCOPE_IDENTITY();

                    SET @Query = REPLACE(@Query, 'sId', @SmoothieId);
                    EXECUTE (@Query);

                END 


            COMMIT TRAN

            RETURN @SmoothieId

        END TRY

        BEGIN CATCH
            ROLLBACK
        END CATCH

    END

Cependant, lorsque j'appelle cette procédure stockée en utilisant dapper.net, retournez toujours -1 en arrière.

        using (var conn = OpenConnection())
        {
            var parameter = new { Query = query, SmoothieId = smoothieId, CreatedDate = createdDate, Status = status, UserId = userId  };
            return conn.Execute("AddSmoothieIngredients", parameter, commandType: CommandType.StoredProcedure);
        }

Dapper.net ne peut probablement pas récupérer la valeur de retour de la procédure stockée. mais je ne sais vraiment pas comment le réparer. s'il vous plaît aider.

Réponse populaire

Donc, la raison pour laquelle Execute () renvoie -1 est parce que votre sproc a SET NOCOUNT ON; qui "supprime le message" xx lignes affectées "après tout DML" selon cette question . Si vous souhaitez désactiver cette fonctionnalité ou non, une autre question est également abordée dans ce lien.

Je suis juste tombé sur le même problème, alors j'ai pensé jeter mes 2 cents.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi