C # - Выходной SqlParameter использует другие значения, чем те, которые приведены? - PullRequest
2 голосов
/ 03 августа 2010

У меня есть SqlCommand, который запускает хранимую процедуру, которая содержит два целочисленных выходных параметра.Непосредственно перед запуском SqlCommand я вижу, что выходные параметры установлены на правильные значения, однако, когда команда фактически выполняется, она использует NULL для параметра 1 и 0 для параметра 2 (проверено с помощью SQL Profiler) независимо от того, для чего я установил параметры.

Упрощенная версия кода выглядит так:

foreach (KeyValuePair<string, object> parameter in outputParameters)
{
    SqlParameter param = new SqlParameter(parameter.Key, parameter.Value);
    param.Direction = ParameterDirection.Output;
    command.Parameters.Add(param);
}

command.ExecuteNonQuery();

Меня смущают две разные вещи:

1) Почему он не используетзначения в параметрах?Я могу поставить точку останова прямо перед command.ExecuteNonQuery() и увидеть, что в списке command.Parameters выходные параметры установлены правильно, однако трассировка профилировщика SQL имеет разные параметры при выполнении запроса.

2) Оба параметрацелые числа и определены точно так же - Почему один установлен в NULL, а другой в 0 ??

Ответы [ 2 ]

4 голосов
/ 03 августа 2010

Вы хотите изменить направление на InputOutput (для каждого редактирования), а не на вывод.

Когда вы ссылаетесь на выходные параметры, вы сообщаете коду, что значения должны возвращаться из фактической хранимой процедуры, а не из вашегокод.Даже если ваш код содержит значение, ваш код на самом деле не заботится о том, что это за значения, поскольку вы указали выходные параметры.

Вот что должно быть:

foreach (KeyValuePair<string, object> parameter in outputParameters)
{
    SqlParameter param = new SqlParameter(parameter.Key, parameter.Value);
    param.Direction = ParameterDirection.InputOutput;
    command.Parameters.Add(param);
}

command.ExecuteNonQuery();
3 голосов
/ 03 августа 2010

Они вывод параметров - то есть значение должно исходить из хранимой процедуры ... логически они не имеют значения на входе,Если вы хотите, чтобы значения от клиента использовались в хранимой процедуре, они должны иметь направление InputOutput.

РЕДАКТИРОВАТЬ: Ответ на ваш комментарий - Output означает просто выход.Input означает просто ввод.InputOutput означает оба пути.Звучит так, будто вам нужны оба пути, поэтому используйте InputOutput.

Что касается того, почему один является нулевым, а другой нет ... Я не знаю, если честно.

...