programing

C#에서 LIKE를 사용하는 Oracle 바인딩 변수 사용

css3 2023. 6. 24. 09:26

C#에서 LIKE를 사용하는 Oracle 바인딩 변수 사용

동적 SQL 생성을 중지하고 바인딩 변수의 사용을 장려하기 위한 노력의 일환으로 몇 가지 문제가 발생했습니다.

.NET용 Oracle Data Providers를 사용하여 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);

이것은 "=" 운영자에게 잘 작동합니다.하지만 저는 "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(불법 이름/값) 예외만 표시됩니다.

내가 뭘 잘못하고 있는 거지?

시도:

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

언급URL : https://stackoverflow.com/questions/3790424/usage-of-oracle-binding-variables-with-like-in-c-sharp