无法将带有'(撇号)的文本插入SQL Server表

时间:2014-09-28 13:27:49

标签: c# sql asp.net sql-server

我正在尝试使用文本框将文本插入到SQL表中:

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

但如果文字包含撇号(例如,你将......),它会显示: Incorrect syntax near 'll'.

2 个答案:

答案 0 :(得分:3)

首先,VALUES部分中有两个值。一个是textBoxTitle.Text,另一个是''。但是你只提供了一个专栏。

如果这是真的,您应该删除查询中的''部分。但更重要的是,您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

如果参数化查询和语句对单引号产生任何问题,请为每个引用使用双引号。

还可以使用using statement来处理数据库连接和命令。

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();
}

答案 1 :(得分: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快)。