【问题标题】:Update comment for sql server error at ASP.NET更新 ASP.NET 上 sql server 错误的注释
【发布时间】:2019-09-07 10:05:17
【问题描述】:

我在 SQL Server 中有一个表 Seatlist

FlightNo     Origin   1      2     3
---------------------------------------
AK511        PEN      NULL   3     NULL
AK576        KUL      4      7     NULL

以下是我的更新查询:

SqlCommand cmdupdate = new SqlCommand ("update Seatlist 
                                           set 2 = " + SeatNo.Text.ToString() + 
                                       " where ((FlightNo='" + FlightNo.Text.ToString() + "') 
                                           and (Origin='" + Origin.Text.ToString() + "'))", con);

cmdupdate.ExecuteNonQuery();

我也尝试过以下查询:

SqlCommand cmdupdate = new SqlCommand ("update Seatlist 
                                           set 2 = @seat 
                                         where ((FlightNo='" + FlightNo.Text.ToString() + "') 
                                           and (Origin='" + Origin.Text.ToString() + "'))", con);

cmdupdate.Parameters.AddWithValue(@"seat", SeatNo.Text);

但我收到以下错误:

“2”附近的语法不正确。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:“2”附近的语法不正确。

【问题讨论】:

  • 试试Update Seatlist set [2] =
  • 我试过了,但我得到了同样的错误,我试着把所有的括号也一样的错误
  • 您不遵守regular identifiers 的规则,因此您需要用方括号分隔这些名称。

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


【解决方案1】:

您应该避免使用原始输入值进行字符串连接。您为SQL injection 打开了大门,这是某人可以用来破坏您的网络应用程序的最常见方式之一。您应该只使用参数化查询。

您的查询问题取决于使用 2 作为列名。由于 2 是 delimited inentifier,因此您应该使用如下括号:

string commandText = "UPDATE Seatlist " +
                     "SET [2] = @Seat " +
                     "WHERE FlightNo = @FlightNo AND Origin = @Origin";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);

    command.Paramters.AddWithValue("@Seat", SeatNo.Text);
    command.Parameters.AddWithValue("@FlightNo", FlightNo.Text);
    command.Parameters.AddWithValue("@Origin", Origin.Text);

    // ... rest of your code
}

【讨论】:

  • 但不幸的是你使用addwithvalue - 不要使用它。
  • 一个更好的答案会解释实际导致问题的原因以及如何解决它。该问题是由使用违反常规标识符规则的列名引起的。此外,关于第一个 (@seat) 和第三个 (@Origin) 参数,您的参数化代码不正确。
  • @Smor 感谢您的链接。我会查一下。也谢谢你指出我的错,我刚刚纠正了。
  • @SMor 如果您有其他答案并且您认为它比这个更好,我建议您发布它,因为您将帮助 OP 和这篇文章的读者。只是我的 2 美分。
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2015-02-07
  • 2019-08-28
相关资源
最近更新 更多