2016-06-02 2 views
0

У меня проблема с SP с Dapper с использованием ODBC Sybase, для параметра ввода у меня нет никаких проблем, когда я пробовал параметр не работает как и ожидалось.Exceute SP с параметром out с использованием Dapper всегда получает нулевое значение (Dapper + ODBC + Sybase)

Оригинал SP имеет инструкцию для вставки, поэтому я вставляю оператор TRANSACTION в код.

Вот мой модифицированный SP:

create proc dbo.SP_TEST_DAPPER(@FIRST_PARM VARCHAR(10), @ErrorMessages VARCHAR(1000) Out ) 
AS 

BEGIN 

    declare @Rtn Int 
    declare @TranName varchar(50) 

    SELECT @TranName = 'SP_TEST' 

    BEGIN TRANSACTION @TranName 
    IF @FIRST_PARM = '1' 
    BEGIN 
     SELECT @ErrorMessages = 'OK' 
    END 
    BEGIN 
     SELECT @ErrorMessages = 'Error' 
     GOTO ERROR_TRAP 
    END 

    COMMIT TRANSACTION @TranName 
    SELECT @ErrorMessages 
    ERROR_TRAP: 
    ROLLBACK TRANSACTION @TranName 
    SELECT @ErrorMessages  
END 

Мой результат: enter image description here

ответ

0

Ваша реализация для ODBC именованных параметров неверен. Вы помещаете именованный параметр с вопросительными знаками в свой оператор и создаете именованный параметр без вопросительных знаков. Вопросительные знаки используются Dapper для анализа утверждения, чтобы найти имена.

storedProcedureName = "dbo.SP_TEST_DAPPER ?FIRST_PARM?, ?ErrorMessages?"; 

pX.Add("FIRST_PARM",firstparm); 
pX.Add("ErrorMessages", dbType: DbType.String, direction: ParameterDirection.Output, size: 1000); 

Смотрите этот ответ для получения дополнительной информации: https://stackoverflow.com/a/26484944/6490042