#PARAN SILVERLIGHT#
  • Tistory
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

OLEDB Provider를 사용해서 Oracle Stored Procedure(pl sql) 실행하기

PROGRAMING/C# 2012. 11. 30. 17:36

보안 관련 공부를 하다가 PL SQL를 작성해서 어플리케이션을 개발하면

SQL 인젝션을 예방할 수 있다고 해서 공부하게 되었다.

 

OLEDB를 사용해서 connection을 맺고 파라미터를 주고 받아서 데이타를 가져오는 예제가 필요한 분들에게

도움이 되었으면 ....

 

ORACLE STORED PROCEDURE : EMPNO를 입력새허 SAL를 받아오는 예제

CREATE OR REPLACE
PROCEDURE GetEmpSalary(p_in IN varchar2, p_out OUT emp.SAL%TYPE) is
      
  v_empsal emp.SAL%TYPE; 
 
BEGIN

  DBMS_OUTPUT.PUT_LINE('emp no  : ' ||p_in);
  --DBMS_OUTPUT.PUT_LINE('p out : ' ||p_out);
 
  SELECT sal
INTO v_empsal
FROM emp
WHERE empno = p_in ;
 
  --DBMS_OUTPUT.PUT_LINE('Query Result : ' ||v_empsal);
  p_out := v_empsal;
  DBMS_OUTPUT.PUT_LINE('salary : ' ||p_out);
 
 EXCEPTION
       WHEN DUP_VAL_ON_INDEX
        THEN DBMS_OUTPUT.PUT_LINE('DUP_VAL_ON_INDEX 에러 발생');
       WHEN TOO_MANY_ROWS
        THEN DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS 에러 발생');
       WHEN NO_DATA_FOUND
        THEN DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND 에러 발생');
       WHEN OTHERS
        THEN DBMS_OUTPUT.PUT_LINE('기타 에러 발생');

END ;

 

위 Stored Procedure를 오렌지에서 실행한 결과 : Salary를 잘 받아오는 것을 확인

 

  

 

C# OLEDB로 CONNECTION, PARAMETER, COMMAND를 작성하여 결과를 받아오는 코드

 

    private void GetEmpSalary(string EmpNO)
    {
        int Salary = 0;

        String sConnectInfo = ConfigurationManager.AppSettings["TNS name : connection 정보"];
        OleDbConnection conn = new OleDbConnection(sConnectInfo);

        try
        {
            conn.Open();

            using (var command = new OleDbCommand("GetEmpSalary", conn))
            {
                command.CommandType = CommandType.StoredProcedure;

 

                OleDbParameter p_in = new OleDbParameter("p_in", OleDbType.VarChar);
                p_in.Direction = ParameterDirection.Input;
                p_in.Value = EmpNO;
                //p_in.Size = EmpNO.Length;// OleDbParameter의 size가 0으로 설정되어 Error가 나는 bug가 있는 것 같다.

                OleDbParameter p_out = new OleDbParameter("p_out", OleDbType.Numeric);
                p_out.Direction = ParameterDirection.Output;
                p_out.Value = 0;

 

                command.Parameters.Add(p_in);
                command.Parameters.Add(p_out);


                command.ExecuteNonQuery();
                Salary = int.Parse(p_out.Value.ToString());
            }

        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }

 

아래와 같이 결과 값을 받아 오는 것을 확인 할 수 있다.

 

 

 

 

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

카테고리

  • Inforamtion Technology (281)
    • DESIGN PATTERN (33)
      • 실용주의 디자인패턴 (29)
    • SOFTWARE ENGINEERING (21)
      • Art Of Readable Code (12)
      • Object Oriented Programming (6)
      • TDD (2)
    • FRAMEWORK (22)
      • Spring.net (2)
      • LightSwitch (20)
    • PROGRAMING (58)
      • C# (20)
      • .NET (6)
      • HTML5 (7)
      • ASP.NET (9)
      • SILVERLIGHT (7)
      • Ruby On Rails (6)
    • PROJECT MANAGEMENT (10)
      • SW Version Management (7)
      • Schedulring Management (1)
    • BOOKS (18)
    • MOBILE APP (1)
      • SENCHA TOUCH (1)
    • SECURITY (5)
    • MES (1)
    • B2B (14)
      • WEBMETHODS (4)
    • ERP (53)
      • SAP/R/3 (51)
    • ABOUT TOOLS (2)
    • FUNDAMENT CONCEPT (21)
    • SOA BPM (22)
    • PORTFOLIO (0)

태그목록

  • 동시성
  • 병렬
  • 프로그래밍

최근에 받은 트랙백

글 보관함

링크

파란실버라이트

블로그 이미지

To remember the time when I started learning Silver Light!

LATEST FROM OUR BLOG

RSS 구독하기

LATEST COMMENTS

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바