Невозможно вставить текст с апострофом в таблицу SQL Server

1

Я пытаюсь вставить текст в таблицу SQL, используя текстовое поле:

SqlCommand cmd = new SqlCommand("INSERT INTO Book(Title) VALUES ('" + textBoxTitle.Text + "','" +
"')", conn);

Но если текст содержит апостроф (например, вы...), он показывает: Incorrect syntax near 'll'.

  • 1
    Почему запятая после значения и перед закрытием?
  • 2
    Не помещайте значения непосредственно в операторы SQL. Вместо этого используйте параметры.
Теги:
sql-server

2 ответа

3
Лучший ответ

Прежде всего, у вас есть два значения в вашей части VALUES. Один из них - textBoxTitle.Text а другой - ''. Но вы предоставили только одну колонку.

Если это правда, вы должны удалить '' часть в своем запросе. Но что более важно, вы всегда должны использовать параметризованные запросы. Этот тип конкатенаций строк открыт для атак SQL Injection.

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

Также using инструкцию using для управления соединениями и командами базы данных.

using(SqlConnection con = new SqlConnection(connString))
using(SqlCommand cmd = con.CreateCommand())
{
    cmd.CommandText = "INSERT INTO Book(Title) VALUES (@title)";
    cmd.Parameters.AddWithValue("@title", textBoxTitle.Text);
    con.Open();
    cmd.ExecuteNonQuery();
}
  • 0
    @Downvoter хочет прокомментировать хотя бы, чтобы я мог понять, где я могу ошибаться?
0

В качестве альтернативы, если вы программируете.Net, вы можете использовать SqlBulkCopy для вставки ваших данных без экранирования каких-либо символов.

https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

В качестве бонуса это быстро (быстрее, чем INSERT, если у вас есть много, чтобы вставить).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню