Как получить одновременно возвращаемое значение цифры 1000 * и оператор выбора из хранимой процедуры? - PullRequest
0 голосов
/ 02 апреля 2020

Передо мной была поставлена ​​задача заменить одну из тех неприятных вещей, основанных на GUI программировании, которые предприятия иногда покупают, пытаясь сократить свой штат программистов с помощью Net основного приложения с помощью Dapper (теперь, когда они понял, что это ужасная ошибка и сделал мусорный код).

Мне не разрешено менять сохраненные процедуры в том виде, в каком они есть.

Вызываемый pro c содержит два значения: оператор select и значение return, которые оба были каким-то образом получены приложением. Мы не можем видеть, как приложение сделало это; это запутано в проприетарных «основных» библиотеках. Это выглядит примерно так:

--things it does
Select Prop1, Prop2, Prop3 from TheTable;
Return 0; --success

(я не могу вставить фактический запрос, потому что у нас агрессивная кибербезопасность, но это базовая логика c. За ней нет параметров OUT.)

Когда я использую метод Даппера ExecuteAsync(, я получаю только возвращаемое значение 0 или ноль, в зависимости от возвращаемого значения. Я пытался изменить его на Query, но я всегда получаю значение NULL, даже если в SSMS есть значение, предоставляющее те же параметры для pro c.

var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("storedproc", paramsObject);

Как я также могу получить результаты оператора select без изменения хранимой процедуры для возврата обеих переменных?

1 Ответ

0 голосов
/ 07 апреля 2020

Добавьте выходной параметр для захвата кода возврата.

EG

var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("exec @rc = storedproc", paramsObject);

Или используйте процедуру CommandType.Stored с параметром ReturnValue. По Передача выходных параметров в хранимую процедуру с использованием dapper в c# код

...