2010-10-18 4 views
1

Я пытаюсь выполнить простой поиск, используя LIKE в моем SQL заявление:Каков наилучший способ параметризации запроса LIKE?

 Using cmd As New OracleCommand 
      cmd.Connection = conn 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = "select * from TABLE where FIELD like '%:text%'" 
      cmd.Parameters.AddWithValue("text", searchValue) 
      ... 
     End Using 

Это не работает - то, что это лучший способ спараметрировать значение поиска?

ответ

9
select * from TABLE where FIELD like ('%' || :text || '%') 
3

обновление: мое плохое, если вы используете драйвер oracle, см. this link за помощью. это зависит от того, какой драйвер используется для доступа к БД, в случае OLEDB вам нужно сделать следующее здесь исправлен код:


Using cmd As New OracleCommand 
      cmd.Connection = conn 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = "select * from TABLE where FIELD like ?" 
      cmd.Parameters.AddWithValue("@text", '%'+searchValue+'%') 
      ... 
     End Using 

в случае водителя оракула вам нужно сделать следующее:


Using cmd As New OracleCommand 
      cmd.Connection = conn 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = "select * from TABLE where FIELD like :text" 
      cmd.Parameters.AddWithValue(":text", '%'+searchValue+'%') 
      ... 
     End Using 

+0

это приводит к ошибке - Я не думаю, что вы можете с строки oncat с + в oracle. – chris

+0

никаких проблем, просьба сообщить об ошибке, и я постараюсь исправить это. –

+0

Ответ Кена Блума дает ответ - '||' - это оператор конкатенации в Oracle. Также существует '' CONCAT() '-функция, но это приведет к менее разборчивому SQL. – fwielstra

1

в подобных случаях я предпочитаю этот синтаксис:

select * from TABLE where INSTR(FIELD, :text) > 0 
+0

Люди в последнее время забывают о «INSTR»: (а) знакомство с C, которое использует разные имена функций, (b) знакомство с языками OO, которые просто позволяют вам называть «найти» на объекте, который вы (не нужно иметь имя типа в имени функции), (c) знакомство с языками сценариев, которые используют регулярные выражения для их строковой манипуляции. Не то чтобы вы ошибаетесь, просто люди больше не думают об этом. –

+0

Я начал использовать его таким образом, увидев его в Oracle Apex в его автоматически сгенерированном коде. –

Смежные вопросы