[英]Usage of Oracle binding variables with LIKE in C#
As part of an effort to stop using dynamic SQL generation and encourage use of bind variables, I am running into some problems.作为停止使用动态 SQL 生成并鼓励使用绑定变量的努力的一部分,我遇到了一些问题。
I am querying an Oracle 9i database from an ASP.NET page using Oracle Data Providers for .NET我正在使用 Oracle Data Providers for .NET 从 ASP.NET 页面查询 Oracle 9i 数据库
The query is查询是
sql = "SELECT somedata FROM sometable WHERE machine = :machineName ";
I define the Oracle Parameter as follows我将 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);
This works fine for "=" operator.这适用于“=”运算符。 But I just can't seem to get it to work with "LIKE".
但我似乎无法让它与“LIKE”一起使用。 I don't know how to format the query so that it accepts usage of the "%" wildcard.
我不知道如何格式化查询,以便它接受“%”通配符的使用。
I have tried:我试过:
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||% ";
and also:还有:
parameter.Value = machine+'%';
but all I get are ORA-00911 (illegal character) and ORA-01036 (illegal name/value) exceptions.但我得到的只是 ORA-00911(非法字符)和 ORA-01036(非法名称/值)异常。
What am I doing wrong?我做错了什么?
Try:尝试:
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' ";
Because of the BIND variable, there wouldn't need to be single quotes around it.由于 BIND 变量,因此不需要在它周围加上单引号。 But the % is not, so I would expect it needing to be encapsulated.
但是 % 不是,所以我希望它需要被封装。
Here is a full query example:这是一个完整的查询示例:
string commandText = "SELECT LastName, FirstName FROM PEOPLE WHERE UPPER(LastName) LIKE '%' || :lastName || '%' AND UPPER(FirstName) LIKE '%' || :firstName || '%'";
string oradb = "yourDatabaseConnectionStringHere"; // Might want to add Using statement for this code and try catch
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand
{
Connection = conn,
CommandText = commandText,
CommandType = CommandType.Text
};
/*IMPORTANT: adding parameters must be in order how they are in order in the SQL statement*/
cmd.Parameters.Add(new OracleParameter("lastName", model.LastName.Trim().ToUpper()));
cmd.Parameters.Add(new OracleParameter("firstName", model.FirstName.Trim().ToUpper()));
OracleDataReader dr = cmd.ExecuteReader();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.