附近有语法错误,如何解决?

    string sql = "update BookInfo set Bname = '" + Bname + "',ISBN='" + isbn + "',publisher='" + publisher + "',sl='" + sl + "',price='" + price + "' where id =" + Request.QueryString["id"];

这句sql语句有问题吗?

img

您提供的 SQL 语句存在一些潜在问题:

  • SQL 注入漏洞:您提供的 SQL 语句将用户输入直接连接到字符串中,而没有对其进行适当的清理。这会使您的数据库容易受到 SQL 注入攻击,恶意用户可能会在您的数据库上执行任意 SQL 命令。为防止这种情况,您应该使用准备好的语句和参数化查询来正确转义和清理用户输入。
  • 单引号和双引号使用不一致:SQL 语句在某些地方使用单引号将字符串值括起来,而在其他地方使用双引号。如果处理不当,这可能会导致语法错误。在整个 SQL 语句中始终使用单引号或双引号通常是一种很好的做法。
  • 可能的语法错误:SQL 语句在子句中的id值周围使用了单引号,但不是字符串值。如果是整数或数值,则不应将其括在引号中。whereidid

下面是一个示例,说明如何使用准备好的语句和参数化查询重写 SQL 语句来解决这些问题:

string sql = "update BookInfo set Bname = @Bname, ISBN = @ISBN, publisher = @publisher, sl = @sl, price = @price where id = @id";

using (SqlCommand cmd = new SqlCommand(sql, con))
{
  cmd.Parameters.AddWithValue("@Bname", Bname);
  cmd.Parameters.AddWithValue("@ISBN", isbn);
  cmd.Parameters.AddWithValue("@publisher", publisher);
  cmd.Parameters.AddWithValue("@sl", sl);
  cmd.Parameters.AddWithValue("@price", price);
  cmd.Parameters.AddWithValue("@id", Request.QueryString["id"]);

  cmd.ExecuteNonQuery();
}

答题不易,求求您采纳哦