Dapper.netを使用してストアドプロシージャを呼び出し、常に-1を返します。

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

質問

ここに私のストアドプロシージャです。私がそれをテストするとき、常に正しい結果を得る。

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

しかし、私がdapper.netを使ってこのストアドプロシージャを呼び出すときは、常に-1を返します。

        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はストアドプロシージャから戻り値を受け取ることはできません。私は本当にそれを修正する方法を知らない。助けてください。

人気のある回答

Execute()が-1を返すのは、あなたのsprocがSET NOCOUNT ON;持っているからSET NOCOUNT ON;これは、 この質問に従って、「xx rows affected」メッセージを「DMLの後に」抑制します。それを無効にするかどうかは、そのリンクでも議論されている別の問題です。

私はちょうど同じ問題に出くわしたので、私は2セントで投げたいと思った。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow