2010-10-18 160 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

相关问题