动态SQL查询导致“Unclosed quotation mark”错误

时间:2011-09-02 17:17:21

标签: c# sql sql-delete

我收到了这个错误:

  

字符串''后面的未闭合引号。

使用以下代码:

lSQL = "DELETE FROM tblCourses where courseCode='" + aCourseCode + "'";

其中lSQL是局部变量,aCourseCode是商店值。有什么建议吗?

3 个答案:

答案 0 :(得分:17)

您应该始终使用参数化查询,否则您的代码很容易受到错误的影响,因为您正在获取错误,甚至更糟糕的SQL注入攻击。在构建SQL查询时,从不在代码中使用字符串连接。这是正确的方法:

using (var conn = new SqlConnection(ConnectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "DELETE FROM tblCourses WHERE courseCode = @courseCode";
    cmd.Parameters.AddWithValue("@courseCode", aCourseCode);
    int deletedRowsCount = cmd.ExecuteNonQuery();
}

这将确保即使aCourseCode变量包含一些转义和危险字符,它们也将得到妥善处理。

答案 1 :(得分:0)

您的aCourseCode变量可能会有单引号或双引号。

答案 2 :(得分:-4)

格式化字符串的更好方法是使用以下内容:

lSQL = String.Format("DELETE FROM tblCourses where courseCode='{0}'", aCourseCode);

还要确保变量aCourseCode中没有任何嵌入式双引号或单引号。

希望有所帮助。