candijen Ответов: 2

Необходимо объявить скалярную переменную @subname error


Это мой код. Я не могу избавиться от этой ошибки, пожалуйста, помогите.

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
   {
       String strConnString = ConfigurationManager.ConnectionStrings["facultylogConnectionString"].ConnectionString;
       String strQuery = "Insert into selections (subname, selections) VALUES (@subname, @selections) where subname= @subname ";
       SqlConnection con = new SqlConnection(strConnString);
       SqlCommand cmd = new SqlCommand();
       cmd.CommandType = CommandType.Text;
       cmd.CommandText = strQuery;
       cmd.Connection = con;
       cmd.Parameters.AddWithValue("@subname", DropDownList5.SelectedValue);
       string var = string.Empty;
       for (int i = 0; i < CheckBoxList1.Items.Count - 1; i++)
       {
           if (CheckBoxList1.Items[i].Selected)
           {
               var += CheckBoxList1.Items[i].Text.ToString() + ",";

           }
       }
       cmd.Parameters.AddWithValue("@selections", var);
       cmd.Parameters.Clear();
       con.Open();
       cmd.ExecuteNonQuery();
       con.Close();
   }


Что я уже пробовал:

Я не знаю, почему я продолжаю получать эту ошибку выше. Даже после того, как я удалю
where subname= @subname "

PIEBALDconsult

Убедитесь, что значение параметра не равно нулю.
И нет, у вас не может быть предложения WHERE для такого типа инструкции INSERT.

2 Ответов

Рейтинг:
9

Patrice T

Посмотрите на комментарии в коде.

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
   {
       String strConnString = ConfigurationManager.ConnectionStrings["facultylogConnectionString"].ConnectionString;
       String strQuery = "Insert into selections (subname, selections) VALUES (@subname, @selections) where subname= @subname ";
       SqlConnection con = new SqlConnection(strConnString);
       SqlCommand cmd = new SqlCommand();
       cmd.CommandType = CommandType.Text;
       cmd.CommandText = strQuery;
       cmd.Connection = con;
       cmd.Parameters.AddWithValue("@subname", DropDownList5.SelectedValue); // Here you declare first parameter
       string var = string.Empty;
       for (int i = 0; i < CheckBoxList1.Items.Count - 1; i++)
       {
           if (CheckBoxList1.Items[i].Selected)
           {
               var += CheckBoxList1.Items[i].Text.ToString() + ",";

           }
       }
       cmd.Parameters.AddWithValue("@selections", var); // Here you declare second parameter
       cmd.Parameters.Clear(); // Here you kill parameters 
       con.Open();
       cmd.ExecuteNonQuery(); // and here you execute the query 
       con.Close();
   }


0x01AA

Я ненавижу голоса ниже 4 без комментариев, так что имейте 5 для баланса.

Patrice T

Большое спасибо.
Со своей стороны, я ценю комментарии, объясняющие, что неправильно в решении.

0x01AA

Со своей стороны, я всегда буду давать комментарий в случае, если голосование будет ниже 4.
Хорошо, для спамеров/троллей/оскорбительных я позволяю себе тогда и когда также давать 1 Без комментариев, но это совершенно другая область.

Patrice T

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

0x01AA

Что я забыл: в Q / A для серьезных ответов я не опускаюсь ниже 3, даже если ответ совершенно неправильный. Это потому что я все еще верю что респондент просто пытался помочь;)

Теперь давайте продолжим помогать и не будем публиковать слишком много шаблонных ответов :-)

Рейтинг:
14

Chris Copeland

Вы, кажется, очищаете параметры после того, как установили их с помощью:

cmd.Parameters.Clear();