본문 바로가기

SW 개발 공부

OracleCommand

< 사전지식 >

1. 쿼리란?

- 데이터베이스에 정보를 요청하는 일.

더보기

DB용 언어를 SQL이라고 하는데, query는 DB에서 조건에 맞는 데이터를 조작할 수 있는 SQL 문장의 집합이다.

 

 

 

C#에서 Oracle 사용하기

 

1. oracle dll 추가

 - System.Data.OracleClient.dll 참조

 

2. Oracle을 DB에 연결 (OracleConnection 클래스 생성& Open)

- 이 개체는 범위에서 벗어나도 열려있는상태로 유지되기에 사용 후 dispose 하거나 using문 내에서 사용후 닫아줘야한다.

 

3. 명령 객체 생성 (OracleCommand 클래스)

 

항목 설명
ExecuteReader 행을 반환하는 명령을 실행한다.
ExecuteOracleNonQuery Connection에 대해 SQL문을 실행하고 영향받는 행의 수를 반환한다.
ExecuteNonQuery SQL insert,delete,update 및 set문과 같은 명령을 실행한다.
ExecuteScalar DB에서 집계 값과 같은 단일값을 .Net Framewok 형식을 ㅗ검색한다.
ExecuteOracleScalar DB에서 집계값과 같은 단일 값을 Oracle 고유 데이터형식으로 검색한다.

OracleCommand 클래스 메서드

4. 파라미터 바인딩

- 명령 객체에 쿼리를 추가하고, 쿼리내에 파라미터들을 바인딩한다.         

 string sqlstr = "SELECT * FROM ALARM_ALT_RAW_DATA " +
                "WHERE ALT_ID = :ALT_ID AND DEV_ID = :DEV_ID AND SETTING_ID = :SETTING_ID AND CHL_NUM = :CHL_NUM " +
                "ORDER BY DEV_ID , SETTING_ID, ALT_ID, CHL_NUM, RAW_ID";

            List<short[]> alarmAltRawDatas = new List<short[]>();

            // 명령 객체 생성
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;

            // 파라미터 바인딩
            cmd.CommandText = sqlstr;
            cmd.Parameters.Add(new OracleParameter("ALT_ID", altId));
            cmd.Parameters.Add(new OracleParameter("DEV_ID", devId));
            cmd.Parameters.Add(new OracleParameter("SETTING_ID", settingId));
            cmd.Parameters.Add(new OracleParameter("CHL_NUM", chlNum));

*ORDER BY 문법

더보기

ORDER BY 쿼리 정렬

- 값들을 정렬할때, ORDER BY 정렬 기준값 ASC,DESC으로 정렬된다.

 

사용 예)

 "ORDER BY DEV_ID , SETTING_ID, ALT_ID, CHL_NUM, RAW_ID" 

 -> 나열한 순으로 정렬됨.

*WHERE 문법

더보기

- 테이블에서 특정 조건에 부합하는 데이터만 조회하고 싶을 때 사용함.

*SELECT A FROM B 문법

더보기

- B에서 A를 찾을때 사용함.

- B의 전체를 불러오고 싶다면 A에 *를 인가하면 됨.

 

 

5. 결과 리더 객체를 리턴

OracleDataReader rdr = cmd.ExecuteReader();

// 레코드 계속 가져와서 루핑
while (rdr.Read())
{
    //blob 자료형 처리를 위해 OracleBlob 이용
    OracleBlob myLob = rdr.GetOracleBlob(rdr.GetOrdinal("RAW_DATA"));  //RAW_DATA => COLUMN INDEX
    byte[] b = new byte[myLob.Length];

    //OracleBlob로 부터 데이터를 읽어 b에 저장
    myLob.Read(b, 0, (int)myLob.Length);

    //bytes -> short로 blockcopy를 이용해 변환함.
    short[] rawData = new short[(int)myLob.Length / 2];
    Buffer.BlockCopy(b, 0, rawData, 0, (int)myLob.Length);
    alarmAltRawDatas.Add(rawData);
}
// 사용후 닫음
rdr.Close();

* Blob 자료형

더보기

LOB : Large Object

- 데이터베이스에 저장되는 다양한 타입의 데이터들 중에 구조화하지 않은 데이터를 처리하기 위한 타입.

 

종류)

- BLOB(Binary), CLOB(Chacrator), NCLOB, BFILE

'SW 개발 공부' 카테고리의 다른 글

[OTDR] Dead Zone 개념과 측정 방식  (0) 2024.11.25
CDC/HID ( USB ) & SPI  (0) 2021.10.15
12.09 정리  (0) 2020.12.09