在参数化查询中使用Replace()函数

时间:2016-09-05 03:56:12

标签: sql vb.net ms-access

我有下面提到的代码试图在数据库中的每一行上执行更新/替换功能,在该行中找到存储在参数中的“搜索”模式。但是,当我在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)。但只有一个参数,这应该没有任何问题。

1 个答案:

答案 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 & ";")