2010-10-18 129 views
1

我想實現一個簡單的搜索,在我的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 

在Oracle驅動程序的情況下,你需要做以下幾點:


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

導致一個錯誤 - 我不認爲你可以在c在oracle中帶+的oncat字符串。 – chris 2010-10-18 14:28:44

+0

沒問題,請提供錯誤,我會嘗試修復它。 – 2010-10-18 14:34:22

+0

Ken Bloom的答案提供了答案 - 「||」是Oracle中的連接運算符。還有'CONCAT()'函數,但會導致不太清晰的SQL。 – fwielstra 2010-10-18 14:52:10

1

在類似案例,我更喜歡這樣的語法:

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

這些天人們已經忘記了所有關於'INSTR'的原因,原因如下:(a)熟悉使用不同函數名稱的C,(b)熟悉OO語言,它只是讓你對你的對象調用'find' '重新搜索(不需要在函數名中包含類型名稱),(c)熟悉使用正則表達式進行字符串操作的腳本語言。並不是說你的回答是錯誤的,只是人們不再想它了。 – 2010-10-20 14:37:44

+0

我在Oracle Apex的自動生成代碼中看到它後,開始使用它。 – 2010-10-21 02:07:11

相關問題