我有以下代码:
Dim executedCmd As OleDb.OleDbCommand = m_dbMgr.GetCommand()
executedCmd.CommandText = "select * from [Parameters] where "
Dim SQLcondition As String = String.Empty
For i As Integer = 0 To ParameterName.Count - 1
executedCmd.CommandText += "ParameterName = @parametername" + i.ToString() + " and ParameterValue @ParamaterCondition" + i.ToString() + " @ParameterValue" + i.ToString()
executedCmd.Parameters.AddWithValue("@parametername" + i.ToString(), ParameterName(i))
executedCmd.Parameters.AddWithValue("@ParameterValue" + i.ToString(), ParameterValue(i))
executedCmd.Parameters.AddWithValue("@ParamaterCondition" + i.ToString(), Condition(i))
Next
ParameterName
,ParameterValue
,ParameterCondition
都是相同的长度ArrayList
,但代码无效。我已经验证了所有变量都有值。
当我运行代码时,它报告语法错误:“查询表达式中缺少操作”
问题是ParameterCondition
的值类似于('>'
,'<'
,'='
,......一些逻辑SQL运算符。)
编辑:如何在参数中包含条件?
答案 0 :(得分:1)
在简化构建逻辑表达式的位置之后添加1 = 1
。请注意AND
逻辑运算符添加的所有条件。您可以从列名称生成参数名称。
executedCmd.CommandText = "select * from [Parameters] where 1 = 1"
....
executedCmd.CommandText += " AND " + ParameterName(i) + " " + Condition(i) + " @" + ParameterName(i)
executedCmd.Parameters.AddWithValue("@" + ParameterName(i), ParameterValue(i))
ParameterCondition必须都是二元运算符。
答案 1 :(得分:0)
数据库引擎在用值替换参数之前会检查SQL语句的语法。所以像“WHERE @ p1 @ p2 @ p3”这样的东西将无法正确解析。 用字符串表达式替换你的条件,例如
commandtext = parameterName + condition + " @p1"