Member 13512434 Ответов: 2

Вставка параметризованного запроса


Я пытаюсь вставить информацию в базу данных Mysql, используя этот код...

private void SubmitBtn_Click(object sender, EventArgs e)
        {


            SqlCommand cmd = new SqlCommand ("INSERT into [Materials Inventory] (Barcode, Material, Location, Quanitiy,  [Date Added]) VALUES ('" + textBox3.Text + "','" + textBox4.Text + "', '" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "' )",sqlcon);

            cmd.Parameters.AddWithValue("Barcode", textBox3);
            cmd.Parameters.AddWithValue("Material", textBox4);
            cmd.Parameters.AddWithValue("Location", textBox5);
            cmd.Parameters.AddWithValue("Quantity", textBox6);
            cmd.Parameters.AddWithValue("[Date Added]", textBox7);

            cmd.ExecuteNonQuery();


Но я получаю эту ошибку при запуске приложения
Необработанное исключение типа 'System.InvalidOperationException' произошло в System.Data.dll

Дополнительная информация: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения-закрыто.

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

Использование непераметризованного запроса,
Переписывание кода

Richard Deeming

Еще раз:

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

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

2 Ответов

Рейтинг:
1

PIEBALDconsult

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

И кроме того, вы хотите что-то вроде:

SqlCommand cmd = new SqlCommand ("INSERT into [Materials Inventory] (Barcode, Material, Location, Quanitiy,  [Date Added]) VALUES (@Barcode, @Material, @Location, @Quantity,  @[Date Added] )",sqlcon);


экспериментируйте оттуда.


Maciej Los

5!

Рейтинг:
0

Karthik_Mahalingam

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

string barCode = textBox3.Text.Trim();
          string Material = textBox4.Text.Trim();
          string Location = textBox5.Text.Trim();
          string Quantity = textBox6.Text.Trim();
          string date = textBox7.Text.Trim();

          SqlCommand cmd = new SqlCommand("INSERT into [Materials Inventory] (Barcode, Material, Location, Quanitiy,  [Date Added])  " +
          " VALUES ( @Barcode,@Material,@Location,@Quantity,@Date)", sqlcon);  // add the parameter names
          cmd.Parameters.AddWithValue("@Barcode", barCode);  // parameter name with respect to the value
          cmd.Parameters.AddWithValue("@Material", Material);
          cmd.Parameters.AddWithValue("@Location", Location);
          cmd.Parameters.AddWithValue("@Quantity", Quantity);
          cmd.Parameters.AddWithValue("@Date", date);
          sqlcon.Open();  //open the connection
          cmd.ExecuteNonQuery();
          sqlcon.Close();  // close the connection


Maciej Los

5ed!

Karthik_Mahalingam

Спасибо Мацей