Параметр вывода строки JSON из хранимой процедуры SQL Server работает в SSMS, но выдает пустое значение в клиенте C # - PullRequest
0 голосов
/ 02 ноября 2018

В моей хранимой процедуре я объявил параметр OUTPUT с именем @Stats:

@Stats nvarchar(max) OUTPUT

В конце моей хранимой процедуры я присваиваю результаты запроса JSON выходному параметру:

SELECT @Stats = (SELECT * FROM JsonStats FOR JSON AUTO)

Если я выполню хранимую процедуру в SSMS, я получу данные JSON из @Stats, как и ожидалось:

DECLARE @Param1 nvarchar(max) = '...'
DECLARE @Stats nvarchar(max)

EXEC MySP @Param1, @Stats OUTPUT

SELECT @Stats

Однако, когда я выполняю хранимую процедуру из кода C #, я получаю пустую строку:

SqlCommand cmd = new SqlCommand("MySP", conn)
        {
            CommandType = CommandType.StoredProcedure
        };

var inputParam = new SqlParameter("@Param1", invoiceKeyListJson);
cmd.Parameters.Add(inputParam);

var outputParam = new SqlParameter("@Stats", SqlDbType.NVarChar, -1);
outputParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParam);

cmd.ExecuteNonQuery();

string statsJson = outputParam.Value.ToString();

После запуска вышеуказанного кода, statsJson пуст. Странно то, что если я жестко закодирую присвоение @Stats произвольной строке в хранимой процедуре, statsJson присваивается это значение.

Почему несоответствие в результатах между SSMS и C #? Что мне нужно сделать, чтобы вернуть данные JSON в C #?

1 Ответ

0 голосов
/ 27 ноября 2018

Я решил это, изменив

SELECT @Stats = (SELECT * FROM JsonStats FOR JSON AUTO)

до:

SELECT @Stats = CAST((SELECT * FROM JsonStats FOR JSON AUTO) AS nvarchar(max))

(явное приведение к nvarchar(max)).

...