Dapper를 사용하여 저장 프로 시저 반환 값을 검색하는 방법

dapper sql-server tsql

문제

이 형식의 저장 프로 시저가 있습니다.

CREATE PROCEDURE AddProduct
    (@ProductID varchar(10),
     @Name  nvarchar(150)
    )
AS
    SET NOCOUNT ON;

    IF EXISTS (SELECT TOP 1 ProductID FROM Products 
               WHERE ProductID = @ProductID)
        RETURN -11
    ELSE
    BEGIN
        INSERT INTO Products ([AgentID], [Name])
        VALUES (@AgentID, @Name)

        RETURN @@ERROR
    END

이 C # 저장 프로 시저를 호출 할 수 있지만 올바른 값을 양식을 얻을 것 수 없습니다.

var returnCode = cn.Query(
    sql: "AddProduct",
    param: new { @ProductID = prodId, @Name = name },
    commandType: CommandType.StoredProcedure);

returnCode 변수에 RETURN -11 또는 RETURN @@ERROR 행에서 반환 된 값이 포함되도록하려면 어떻게해야합니까?

수락 된 답변

SQL에서 RETURN 문을 사용하려면 C #이됩니다 ...

var _params = new DynamicParameters{ @ProductID = prodId, @Name = name };
_params.Add(
    name: "@RetVal",
    dbType: DbType.Int32,
    direction: ParameterDirection.ReturnValue
    );
var returnCode = cn.Execute(
    sql: "AddProduct",
    param: _params,
    commandType: CommandType.StoredProcedure);
return _params.Get<int>("@RetVal");

내가 원하는 구현은 아니지만 작동합니다.


인기 답변

SELECT 를 사용하여 저장 프로 시저의 값을 반환하는 것이 좋습니다. 또한 dapper 호출에서 반환 유형을 지정해야합니다.

RETURN -11

된다

SELECT -11

dapper 호출은 다음과 같이됩니다.

var returnCode = cn.Query<int>(..

이 패턴을 여러 번 구현했으며 예상대로 작동합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.