【问题标题】:SqlException: Incorrect syntax near ',' [closed]SqlException:','附近的语法不正确[关闭]
【发布时间】:2020-11-03 02:41:28
【问题描述】:

我无法找到我的语法有什么问题:

SqlConnection conn = new SqlConnection(connstr);
conn.Open();
            
SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[Labeler_Email_For_Confirmation_Agents] (Id, Response) VALUES (" +  TempData["id"] + "  ,  " + Correctornot + ");");

cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = conn;

cmd.ExecuteReader();

我不明白 - 我的语法错误是什么? connstr 是我的连接字符串,Correctornot 是从按钮接收的值,即按钮值

【问题讨论】:

标签: asp.net sql-server asp.net-mvc azure


【解决方案1】:

请尝试

SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[Labeler_Email_For_Confirmation_Agents] (Id, Response) VALUES (" +  TempData["id"].ToString + "  ,  " + Correctornot.ToString + ");");

【讨论】:

    【解决方案2】:

    您需要在第二个参数值周围添加单引号来解决此问题

    SqlCommand cmd = new SqlCommand(" INSERT INTO [dbo].[Labeler_Email_For_Confirmation_Agents] ( Id , Response ) VALUES ( " +  TempData["id"] + "  ,  '"+ Correctornot + "'  );" );
    

    但是,除了这段代码对sql注入攻击开放之外,如果Correctornot变量中的文本本身有单引号并且是一个很大的NO-NO,这段代码仍然会失败

    check this 查看如何参数化查询的示例代码

    【讨论】:

      【解决方案3】:

      如果 Response 是 varchar/string 类型,则需要用 ' 包围该值:

      SqlCommand cmd = new SqlCommand(" INSERT INTO [dbo].[Labeler_Email_For_Confirmation_Agents] ( Id , Response ) VALUES ( " +  TempData["id"] + "  ,  '"+ Correctornot + "'  );" );
      

      说你真的应该使用参数作为最佳实践

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 2021-01-23
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-04-13
        • 1970-01-01
        相关资源
        最近更新 更多