Добавление данных в C # и SQL Server

#c# #sql-server

#c# #sql-сервер

Вопрос:

 private void btn_add_store_Click(object sender, EventArgs e)
{
    cmd = new SqlCommand("Insert into Product values(" sa_code ",'"  pro_name  "'," quantity ",'" price "','" notes "')", con);
    con.Open();
        
    cmd.ExecuteNonQuery();
       
    con.Close();
}
  

введите описание изображения здесь

Комментарии:

1. Удалите символ ‘ в строковых частях » «.

2. @Malekel Добро пожаловать в StackOverflow. Пожалуйста, не предоставляйте код в виде изображения. Пожалуйста, включите код и связанную с ним ошибку в информацию о трассировке стека.

3. Вы должны скопировать и вставить код в вопрос вместо публикации изображения. Также это может быть проблема с одним из значений, которые вы объединяете в запрос, поэтому вам действительно следует использовать параметры вместо этого.

4. У вас неправильный синтаксис sql. Insert into Products(code, proName...) values

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

Ответ №1:

Не видя, каким было окончательное составленное значение CommandText , трудно комментировать конкретно, поскольку это будет зависеть от передаваемых значений, но в конечном счете проблема здесь в том, что это зависит от передаваемых значений. Вы никогда не должны объединять значения для создания SQL, в основном — это делает вас уязвимыми для злонамеренной SQL-инъекции или случайных ошибок из-за таких вещей, как кавычки в полях. Существует также вторичная проблема неоднозначного порядка столбцов. Я не могу достаточно убедительно утверждать, что здесь следует использовать параметры (а также называть столбцы); например:

 insert into Product (Code, ProductName, Quantity, Price, Notes)
values (@sa_code, @pro_name, @quantity, @price, @notes);
  

Но тогда нам нужно передать эти параметры в; такой инструмент, как Dapper, сделает это безболезненным:

 using Dapper; // at the top of the file
...
con.Execute(@"
insert into Product (Code, ProductName, Quantity, Price, Notes)
values (@sa_code, @pro_name, @quantity, @price, @notes);",
    new { sa_code, pro_name, quantity, price, notes });
  

Здесь Dapper будет иметь дело с добавлением всех параметров для вас; он также будет обрабатывать открытие и закрытие соединения от вашего имени.

Комментарии:

1. Отсутствие одинарных кавычек sa_code может быть правильным, если это целое число.

2. @juharr на самом деле, еще раз взглянув на изображение, я, возможно, ошибся в цитате, но: я утверждаю, что это все еще правильное исправление 🙂

3. @juharr перефразировал для ясности

4. О, определенно, они должны включать столбцы и использовать параметры, я просто говорю, что трудно определить точную проблему, поскольку кавычки сбалансированы, и мы не знаем типы или значения, которые объединяются (которые могут включать одинарные кавычки, которые не экранируются)

5. Я попробовал решение, но появляются ошибки, я изменил код, и он успешно сработал, вот код: cmd = new SqlCommand («Вставить в значения продукта (Код, название, количество, цена, примечания) (‘» sa_code. Текст «‘,'» pro_name. Текст «‘,'» количество. Текст «‘,'» цена. Текст «‘,'» примечания. Text «‘)», con); con. Открыть(); cmd. ExecuteNonQuery(); con. Закрыть();

Ответ №2:

  cmd = new SqlCommand("Insert into Product(Code, Name, Quantity, Price, Notes)values('" sa_code.Text  "','" pro_name.Text "','"  quantity.Text   "','" price.Text "','" notes.Text "')", con);
        con.Open();
        
        cmd.ExecuteNonQuery();
        con.Close();
  

//это правильный ответ