我有下面提到的代码试图在数据库中的每一行上执行更新/替换功能,在该行中找到存储在参数中的“搜索”模式。但是,当我在VB.NET程序中运行查询时,程序正在跳过它应该击中的行。
例如,假设intQuestionID
变量设置为4. QuestionStacks
表中的值为;4;0;14;24;34;
。 SQL应该用;4;
替换第一个;0;
,但事实并非如此。事实上,没有任何改变。即使该值是唯一的;4;
。
Dim sqlClearQuestion As New OleDb.OleDbCommand("UPDATE QuestionStacks SET QuestionData = REPLACE([QuestionData], "";@0;"", "";0;"") ", DBConnection)
sqlClearQuestion.Parameters.AddWithValue("@0", intQuestionID)
sqlClearQuestion.ExecuteNonQuery()
我通过在Access 2016中的查询生成器中运行SQL来检查此查询,它可以正常工作。但是,尝试在此VB.NET函数中使用它,它不会产生所需的结果。需要做些什么改变?
N.B。我知道不需要访问SQL上的.AddWithValue
,并且实际上已将其更改为其他内容(阅读:https://stackoverflow.com/a/6794245/692250)。但只有一个参数,这应该没有任何问题。
答案 0 :(得分:1)
当他们看到分隔符或参数占位符周围的任何其他装饰时,应始终怀疑。参数占位符应单独显示,参数 value 中包含任何必需的特殊字符。例如,一个非常常见的错误是尝试使用
' no good
cmd.CommandText = "SELECT * FROM Students WHERE FirstName LIKE '?%'"
cmd.Parameters.AddWithValue("?", theName)
何时使用正确的方法
' good
cmd.CommandText = "SELECT * FROM Students WHERE FirstName LIKE ?"
cmd.Parameters.AddWithValue("?", theName & "%")
在您的特定情况下,您将要使用
cmd.CommandText = "UPDATE QuestionStacks SET QuestionData = REPLACE([QuestionData], ?, "";0;"") "
cmd.Parameters.AddWithValue("?", ";" & intQuestionID & ";")