Asp.net 靠近'的语法不正确;(';

Asp.net 靠近'的语法不正确;(';,asp.net,sql-server,vb.net,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.Exec

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

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()
行出现错误,靠近“(”的语法不正确。
那么,我想如何修复此错误?

这将修复您的错误

Dim cmdUp As New SqlCommand("UPDATE TblQuestion SET QuestionTxt ='" + 
                            question.Text + "' where QuestionId=@id", conn) 
但是您有一个更大的问题。此代码将允许SQL注入攻击


HT:

您的问题是由于尝试传递字符串值而没有将其括在单引号中引起的。将您的
问题.Text
放在单引号之间可以解决目前的问题。但这不是处理用作sql命令的字符串文本的正确方法

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


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

那么我想如何解决这个问题?有什么想法吗?谷歌搜索Sql注入提供了microsoft的优秀文章:当我更改您的代码时刚才,我得到的错误是cmdUp行的列名无效。ExecuteOnQuery()转到“将参数集合与动态SQL一起使用”部分--这将为您的代码提供最直接的翻译。@luly,那么我猜您的列名无效。您的列名为
QuestionTxt
QuestionID
?您能在VB中使用@吗?@Ciarán抱歉。您现在是正确的,已修复
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()