programing

엔티티 프레임워크에서 원시 오라클 SQL 쿼리 매개 변수화

closeapi 2023. 10. 23. 21:50
반응형

엔티티 프레임워크에서 원시 오라클 SQL 쿼리 매개 변수화

EF 4의 Oracle 동의어(non-entity)에 대한 원시 SQL 쿼리를 매개 변수화하려고 하는데 몇 가지 문제가 있습니다.현재 저는 아래의 코드와 같은 작업을 하고 있는데, 이는 제가 본 몇 가지 예를 바탕으로 한 것입니다.

 string term="foo";
 OracleParameter p = new OracleParameter("@param1", term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery<ProjectTask>("SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%@param1%') WHERE rownum<=100", parameters).ToList();

이 작업을 실행해도 결과가 반환되지 않습니다.매개 변수를 다음과 같은 것으로 교체하면

"SELECT * FROM web_project_task_vw WHERE project_num like '%"+term+"%'"

예상한 결과를 반환하지만 이는 분명 SQL 주입 위험입니다.

오라클 DB의 EF 4에서 매개 변수가 어떻게 작동하는지에 대해 올바른 방향을 알려줄 수 있는 사람이 있습니까?

감사해요.

첫째, Mohammed가 작성한 것처럼 매개 변수 앞에 ':'를 붙여야 하지만 정의한 대로가 아니라 쿼리에서만 사용할 수 있습니다.둘째, 현재 파라미터의 값이 아니라 문자열을 포함하는 문자열을 검색하고 있습니다.@param1. 따라서 매개 변수의 값을 %로 둘러싸면 결과를 얻을 수 있습니다.

따라서 이는 다음과 같이 보여야 합니다.

string term="foo";
 OracleParameter p = new OracleParameter("param1", term);
 object[] parameters = new object[] { p };
 var model = db.Database.SqlQuery<ProjectTask>("SELECT * FROM (SELECT * FROM web_project_task_vw WHERE project_num like '%'||:param1||'%') WHERE rownum<=100", parameters).ToList();

당신의.p매개 변수 이름이 올바르지 않을 수 있습니다. 이름은 다음과 같아야 합니다.param1,것은 아니다.@param1. 쿼리도 올바르지 않습니다. 바꾸기'%@param1%'와 함께'%:param1%'.

언급URL : https://stackoverflow.com/questions/15509346/parameterizing-a-raw-oracle-sql-query-in-entity-framework

반응형