< 사전지식 >
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 |