2010-09-24 127 views
12

作为努力停止使用动态SQL生成并鼓励使用绑定变量的一部分,我遇到了一些问题。在C#中LIKE中使用Oracle绑定变量

我从一个ASP.NET页面使用Oracle数据提供程序.NET

查询查询一个Oracle 9i数据库是

sql = "SELECT somedata FROM sometable WHERE machine = :machineName "; 

我定义Oracle参数如下

OracleParameter parameter = new OracleParameter(); 
parameter.ParameterName = "machineName"; 
parameter.OracleDbType = OracleDbType.Varchar2; 
parameter.Value = machine; //machine is a variable of type string 
parameterList.Add(parameter); 

这适用于“=”运算符。但我似乎无法让它与“LIKE”一起工作。我不知道如何格式化查询,以便它接受“%”通配符的使用。

我曾尝试:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName% "; 
sql = "SELECT somedata FROM sometable WHERE machine LIKE ':machineName%' "; 
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName||% "; 

也:

parameter.Value = machine+'%'; 

但我得到的是ORA-00911(非法字符)和ORA-01036(非法名称/值)例外。

我在做什么错?

+0

重复此问题:http://stackoverflow.com/questions/1412023/constructing-a-good-search-query-using-system-data-oracleclient – CodingGorilla 2010-09-24 19:48:32

回答

24

尝试:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' "; 

因为绑定变量的,就并不需要它周围的单引号。但%不是,所以我期望它需要被封装。

+0

您,先生,是正确的。这确实是最后的选择,我错过了。谢谢! – 2010-09-24 20:00:34

+0

非常感谢你的回答!我正在使用oracle数据库驱动程序处理一个节点项目,并且遇到同样的问题。出于好奇,我如何在通配符运算符(%)之前需要两个管道(||)? – 2015-07-23 03:46:54

+2

@DaveCooper ||连接'%',它是一个连接命令。 – 2015-07-26 00:43:21