Передать условие SQL в качестве параметра OleDb
У меня есть следующий код:
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).
Изменить: Как я могу включить условия в параметры?
2 ответа
Добавлять 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 должны быть бинарными операторами.
Ядро базы данных проверит синтаксис оператора SQL, прежде чем заменить параметры значениями. Так что что-то вроде "WHERE @p1 @p2 @p3" не будет проанализировано правильно. Замените ваше условие строковым выражением, например
commandtext = parameterName + condition + " @p1"