.NET

C# 에서 OracleCommand 쓸 때 유의 사항

김모작자 2014. 9. 23. 16:57

하루 종일 삽질하다가 알게 된 문제..

1)OracleCommand 에 파라미터를 전달할때 @ 또는 : 쓰는 문제

SQL 문에
"insert into OoopsTable (FileNo, storage_origin, isdeleted, filepath, filename, filesize, IsDirectory, stdFilehash, whenRegistered, FTSearchField, FTSearchField2)
                                            values(CDPSTRGFILESSEQ.nextval, :storage_origin, 'N', :filepath, :filename, :filesize, :isdirectory, :stdFilehash, sysdate, :FTSearchField, :FTSearchField2) ";

파라미터임을 표시할때 이렇게 :xxx 형태로 파라미터를 쓰게 된다. 과거 버전은 @ 를 쓰는것 같다

버전에 따라 @ 를 쓰거나 : 를 쓰는것 까진 이해할 수 있다.. 버전이 다르다니깐..

 

2) 파라미터를 분명히 넘겼는데 에러 날때

근데.. 보통 쿼리에 필요한 파라미터를
OracleParameter 를 만들어 추가하는데..  아래와 같이 할 것이다
OracleCommand cmd = new OracleCommand( my query );
...
cmd.Parameters.Add( new oracleParameter("파라미터 이름" ....));
cmd.Parameters.Add( new oracleParameter("파라미터 이름" ....));
cmd.Parameters.Add( new oracleParameter("파라미터 이름" ....));
cmd.Parameters.Add( new oracleParameter("파라미터 이름" ....));
....

근데 자꾸
ORA-01722 invalid number
bind 오류 등이 난다.

해결책 부터 얘기하자면

OracleCommand 만들때 BindByName 을 true 로 설정해서 원래 생각하던대로 넘기면 해결된다. 왜 이게 기본값이 false 인지 모르겠다.. 썩을..

BindByName 을 false 로 해두면 변수 이름은 무시되고 서수에 의해 맵핑된다, 그래서 파라미터 인자 와 추가된 파라미터가 다르면 계속 파라미터 오류가 생긴다..