Параметры команды C # sql не используются? - PullRequest
0 голосов
/ 08 февраля 2019
SqlCommand command = new SqlCommand("UPDATE qcCheckList SET reviewed = @0, errorLevel = @1, comment = @2 WHERE guid = @3 and itemId = @4", connection);
command.Parameters.AddWithValue("0", cli.reviewed.Checked);
int errorLevel = 0;
if (cli.error.Text == "Level 1")
    errorLevel = 1;
else if (cli.error.Text == "Level 2")
    errorLevel = 2;
else if (cli.error.Text == "Level 3")
    errorLevel = 3;
command.Parameters.AddWithValue("1", errorLevel);
command.Parameters.AddWithValue("2", cli.comments.Text);
command.Parameters.AddWithValue("3", guid);
command.Parameters.AddWithValue("4", cli.itemId);
command.ExecuteNonQuery();
Console.WriteLine(command.CommandText);

Когда я запускаю этот код, не похоже, что параметры моей команды sql заменяются их действительными значениями.Я хочу видеть их значения при компиляции команды, чтобы видеть, отправляется ли правильная команда.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Ответ основан на моем предположении, что вы ожидаете изменения оператора запроса (строки).Это предположение основано на вашей формулировке, а также на последнем предложении в выражении вашего кода.

Console.WriteLine (command.CommandText);

Текст запроса неизменено, т.е.параметры в тексте запроса не заменяются назначенными значениями параметров.Параметры и их значения отправляются с текстом запроса в СУБД для выполнения.В Sql Server вы можете увидеть это, если вам нужно профилировать экземпляр Sql Server с помощью Profiler.


В качестве примечания, я не рекомендую вам использовать AddWithValue.См. Также Можем ли мы прекратить использовать AddWithValue () уже? .Вместо этого просто используйте Add.Также вы должны давать осмысленные имена вашим параметрам, например, "@errorLevel", когда это возможно, это облегчает отладку.

command.Parameters.Add("@errorLevel", SqlDbType.Int).Value = errorLevel;

Нет необходимости добавлять префиксы к именам параметров с помощью "@"вызов Add, как это будет сделано методом, если вы этого не сделали.Это считается хорошей практикой, но это вопрос мнения.

0 голосов
/ 08 февраля 2019

Когда вы присваиваете значение параметрам, командная строка не изменится.Чтобы увидеть фактические значения параметров, вы можете получить значения после того, как они назначены

 foreach (SqlParameter item in command.Parameters)
 {
    Console.WriteLine(item.ParameterName + "=" + item.Value);
 }

. Здесь будут отображаться фактические значения

0 голосов
/ 08 февраля 2019

не используйте @ числа, но с именами .. такими как @parmReview, @parmError и т. Д. ... тогда значения NAMED находятся в вашем

command.Parameters.AddWithValue( "parmReview", cli.reviewed.Checked)
command.Parameters.AddWithValue("parmError", errorLevel);
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...