before하지만이 솔루션은 저와 함께 작동하지 않는 것 같습니다. 나는 현재이 할 노력하고있어C#/.Net의 "on the fly"저장 프로 시저를 생성하고 컴파일하십시오.
:
- 오라클
- 기업 라이브러리 5.0을 사용하여 SQL 명령을 만들기위한 "CREATE PROCEDURE에"스크립트 문자열을 구축하고 매개 변수로이 문자열을 전달
- 되세요 오라클 데이터베이스에 저장된 프로 시저
그래서 지금까지 포인트 # 3 SQL 개발자를 열고 프로 시저 트리 목록을 확장하면 다음 절차를 볼 수 있습니다 bu t는 적색 십자가 원으로 표시됩니다. 이는 컴파일러 오류가 있음을 의미합니다. SQL Developer 쿼리 창에서 이와 동일한 코드를 실행하면 문제가 없으며 컴파일됩니다. SQL Developer에서는 "CREATE PROCEDURE"스크립트를 실행해도 아무런 오류가 발생하지 않기 때문에 프로 시저를보고 실행할 수는 있지만 C#에서는 수행하지 않기 때문에 확실하지 않습니다.
IDBCommand.Prepare()
을 호출해야한다는 내용의 초반에 게시 된 링크를 읽었지 만 SQLCommand.CommandType이 StoredProcedure 유형이고 실제로 프로 시저를 호출하지 않고 순수 SQL을 실행하는 경우에만 해당 메서드가 관련이 있습니다 그럼에도 불구하고 테스트를 위해서 StoredProcedure에 할당 한 새 명령을 만든 다음 그 명령에서 Prepare() 메서드를 호출하여 마지막으로 ExecuteNonQuery()
메서드를 호출하는 새 메서드를 만들었습니다. 컴파일되지 않았기 때문에 사용할 수없는 객체 (저장 프로 시저)는 예외입니다 ...
사실, 프로 시저를 만들고 C#에서 컴파일 할 수있는 방법을 알고있는 사람이 있는지 궁금합니다. 까맣다 하지만 엔터 프라이즈 라이브러리를 사용하는 것만으로도 오라클 제공자에게 직접 "하드 코딩"하는 것은 괜찮습니다.
Btw, 코드에서 프로 시저를 만드는 것이 나쁜 습관이라고 나는 말하기 전에 불행히도 이것은 고객의 프로젝트이며 우리는 제작에 대한 결정을하지 않았으며 실제로 SQL Server에서 마이그레이션하려고합니다. 오라클에
글쎄, 캐리지 리턴 데 문자 (CR) 또는 줄 바꿈, CREATE PROCEDURE 명령 문자열이이 문제가 발생합니다, 그래서, 어떻게 든이 Oracle에 의해 해석되고 잘못 된 이유는 누가 알겠습니까. 어쨌든 mySqlStr.Replace (System.Environment.NewLine, string.Empty)를 수행하여 "다소"해결했습니다. 그런 식으로 명령은 10g Express에서 올바르게 구문 분석되는 단일 행으로 이동합니다. –