programing

c#에서 단일 파라미터를 여러 번 사용하는 더 나은 방법

muds 2023. 10. 13. 22:36
반응형

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

반응형