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
'programing' 카테고리의 다른 글
엑셀 2007에서 65536개 이상의 행을 볼 수 있습니까? (0) | 2023.06.24 |
---|---|
MongoDB: 스키마를 어떻게 정의합니까? (0) | 2023.06.24 |
Mongo의 모든 문서에서 문자열을 바꾸는 방법 (0) | 2023.06.24 |
PLSQL JDBC:마지막 행 ID를 가져오는 방법? (0) | 2023.06.19 |
Firebase용 Cloud Functions 오류: "400, 함수 트리거 유형 또는 이벤트 공급자를 변경할 수 없습니다." (0) | 2023.06.19 |