반응형
엔티티 프레임워크에서 원시 오라클 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
반응형
'programing' 카테고리의 다른 글
동일한 이름의 형상화된 뷰 및 테이블 (0) | 2023.10.28 |
---|---|
jquery 요소를 html 요소로 변환 (0) | 2023.10.23 |
입력 텍스트에서 깜박이는 커서를 숨기는 방법? (0) | 2023.10.23 |
윈도우 10에서 도커 이미지 위치는? (0) | 2023.10.23 |
Android Material과 Appcat Manifest 병합 실패 (0) | 2023.10.23 |