'附近的语法不正确('

时间:2014-06-15 15:33:07

标签: asp.net sql-server vb.net

我有一个关于更新表格中数据的问题。这是代码:

Dim cmdUp As New SqlCommand("UPDATE TblQuestion SET (QuestionTxt =" + question.Text + ") where QuestionId=@id", conn) 

conn.Open()
cmdUp.Parameters.AddWithValue("@id", result)

cmdUp.ExecuteNonQuery()
conn.Close()

错误,'('出现在第cmdUp.ExecuteNonQuery()行附近的语法不正确。 那么,我想如何修复此错误?

2 个答案:

答案 0 :(得分:3)

这将解决您的错误。

Dim cmdUp As New SqlCommand("UPDATE TblQuestion SET QuestionTxt ='" + 
                            question.Text + "' where QuestionId=@id", conn) 

但是你有一个 MUCH 更大的问题。此代码将允许SQL注入攻击。

X"; DROP TABLE TblQuestion;

HT:http://xkcd.com

答案 1 :(得分:1)

你的问题是由试验性的传递一个字符串值而不用单引号括起来引起的。将question.Text放在单引号之间可以解决问题。但这不是处理用作sql命令的字符串文本的正确方法。

这种情况只有一种方法。使用参数化查询(顺便提一下,您的查询的一半已经参数化,为什么不是问题文本?)

Dim cmdUp As New SqlCommand("UPDATE TblQuestion " & _
                            "SET QuestionTxt =@quest " & _
                            "where QuestionId=@id", conn) 

conn.Open()
cmdUp.Parameters.AddWithValue("@id", result)
cmdUp.Parameters.AddWithValue("@quest", question.Text)
cmdUp.ExecuteNonQuery()
conn.Close()

参数化查询避免了Sql注入,如其他答案中所述,但也避免解析错误。如果您的用户键入包含单引号的问题,会发生什么?我收到另一个语法错误。