Я пытаюсь вставить текст в таблицу SQL, используя текстовое поле:
SqlCommand cmd = new SqlCommand("INSERT INTO Book(Title) VALUES ('" + textBoxTitle.Text + "','" +
"')", conn);
Но если текст содержит апостроф (например, вы...), он показывает: Incorrect syntax near 'll'.
Прежде всего, у вас есть два значения в вашей части 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();
}
В качестве альтернативы, если вы программируете.Net, вы можете использовать SqlBulkCopy для вставки ваших данных без экранирования каких-либо символов.
В качестве бонуса это быстро (быстрее, чем INSERT, если у вас есть много, чтобы вставить).