Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用带有LIKE的Oracle绑定变量#_C#_Asp.net_Oracle_Odp.net_Ora 01036 - Fatal编程技术网

C# 在C中使用带有LIKE的Oracle绑定变量#

C# 在C中使用带有LIKE的Oracle绑定变量#,c#,asp.net,oracle,odp.net,ora-01036,C#,Asp.net,Oracle,Odp.net,Ora 01036,为了停止使用动态SQL生成并鼓励使用绑定变量,我遇到了一些问题 我正在使用Oracle Data Providers for.NET从ASP.NET页面查询Oracle 9i数据库 问题是 sql = "SELECT somedata FROM sometable WHERE machine = :machineName "; 我定义Oracle参数如下 OracleParameter parameter = new OracleParameter(); parameter.Parameter

为了停止使用动态SQL生成并鼓励使用绑定变量,我遇到了一些问题

我正在使用Oracle Data Providers for.NET从ASP.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);
这对于“=”操作符很有效。但我似乎无法让它与“喜欢”一起工作。我不知道如何格式化查询,使其接受“%”通配符的使用

我试过:

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(非法名称/值)异常

我做错了什么?

试试:

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

由于BIND变量,因此不需要在其周围加单引号。但%不是,因此我希望它需要封装。

下面是一个完整的查询示例:

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();

这个问题的副本:主席先生,你是正确的。这确实是我错过的最后一个选择。非常感谢。非常感谢你的回答!我正在使用oracle数据库驱动程序处理一个节点项目,遇到了相同的问题。只是出于好奇,为什么在通配符运算符(%)之前我需要两个管道(| |)?@DaveCooper该| |连接“%”,这是一个连接命令。@edgarochacarvalho谢谢!我不知道这一点-这也解释了为什么我尝试使用+运算符时总是失败!这帮助我绕过了我们项目中相同的问题。谢谢!