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; 있기 때문입니다 SET NOCOUNT ON; 이 질문 에 따라 "DML 다음에 오는"xx rows affected "메시지를"억제합니다. 사용 중지 여부는 해당 링크에서 논의 된 또 다른 질문입니다.

나는 똑같은 문제에 직면하여 2 센트를 던질 것이라고 생각했다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow