【问题标题】: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 + "' );" );
说你真的应该使用参数作为最佳实践