c#에서 단일 파라미터를 여러 번 사용하는 더 나은 방법
데이터베이스에서 데이터를 쿼리하기 위해 준비된 문을 사용하는 것은 처음이며 c#, 특히 Oracle Parameters에 대한 매개 변수를 구현하는 데 문제가 있습니다.
예를 들어 다음과 같은 SQL이 있다고 가정해 보겠습니다.
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm and t2.columnY = @parm"
그리고 암호는 이것입니다.
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
문제는 cmd가 실행될 때 t1.columnX가 strParm 값을 얻지만 t2.columnY가 strParm 값을 막 얻으려 할 때 "ORA-01008: not all variables bounded" 예외가 발생한다는 것입니다.
파라미터가 sql의 다른 곳에 나타나더라도 파라미터는 한 번만 대체되는 것으로 보입니다.
제가 시도한 한 가지 해결책은 다음과 같습니다.
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
또 다른 해결책은 다음과 같습니다.
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm1", strParm));
cmd.Parameters.Add(new OracleParameter("@parm2", strParm));
수정된 sql은 다음과 같습니다.
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm1 and t2.columnY = @parm2"
문제는 동일한 값을 가진 다른 파라미터를 추가하지 않아도 되도록 더 나은 방법이 없을까 하는 것입니다.
참고: 쿼리의 여러 부분에서 @parm이 사용됨을 보여주기 위해 위의 쿼리를 단순화했습니다.실제로 이 쿼리는 동일한 매개 변수를 여러 번 사용했으며 동일한 이름과 값의 매개 변수를 두 개 이상 추가해야 하는 어려움이 있습니다.
이전에도 같은 문제가 있었는데 IIRC를 통해 해결되었습니다.
cmd.BindByName = true;
EDIT: 방금 다시 확인해보니 쿼리에서 파라미터를 여러 번 지정할 수 있지만 파라미터 값을 한 번 설정할 수 있습니다.내가 당신에게 다르게 하고 있는 유일한 것은 내가 매개변수 이름을 앞글자로 지정하는 것입니다.:
,예를들면:param
.
당신의 경우에는 두 개의 매개변수를 실제로 사용할 필요가 없어 보입니다.SQL을 다음과 같이 변경하는 방법은 어떻습니까?
select * from table1 t1, table2 t2 where t1.columnX = @parm and t2.columnY = t1.columnX
또는 심지어
select * from table1 t1 join table2 t2 on t2.columnY = t1.columnX where t1.columnX = @parm
언급URL : https://stackoverflow.com/questions/7917881/better-way-of-using-a-single-parameter-multiple-times-in-c-sharp
'programing' 카테고리의 다른 글
구글 분석 API의 게시물에 대한 서버 응답 상태를 얻는 방법 또는 404 상태의 페이지를 필터링하는 방법은 무엇입니까? (0) | 2023.10.13 |
---|---|
MySQL 테이블 이름의 밑줄이 문제를 일으키나요? (0) | 2023.10.13 |
@PathVariable을 사용하여 Spring MVC 컨트롤러를 단위 테스트하는 방법은 무엇입니까? (0) | 2023.10.13 |
다른 테이블의 값으로 열 업데이트 (0) | 2023.10.13 |
Oracle PL/SQL 개발자를 사용하여 테스트 데이터 생성 (0) | 2023.10.13 |