5월 30, 2016

ODBC API


연결 과정

  1. ODBC Data Source 설정 참고)windows 10에서 ODBC data source 설정 방법
  2. DB에 연결
    1. Header 파일 include: sql.h , sqltypes.h , sqlext.h
    2. SQLAllocHandle(..): Environment handle (object) 할당
    3. SQLSetEnvAttr(..): Environment handle 설정
    4. SQLAllocHandle(..): Connection handle (object) 할당
    5. SQLSetConnectAttr(..): Connection handle 설정
    6. SQLConnect(..) (또는 SQLDriverConnect(..)): DB와 연결
    7. SQLDriverConnect(..)는 GetDesktopWindow() 사용해 windows.h 사용.

    8. SQLAllocHandle(..): Statement handle (object) 할당
    9. (SQLSetStmtAttr(..): Statmenet handle 설정)

    ODBC API에 param.로 char string을 전달 시 반드시 wchar 형으로 전달해야 함. 참고) wide character type (wchar_t) 란?

  3. statement 실행
  4. Query 결과 확인
  5. DB와의 연결 해제
    1. SQLFreeHandle(..): Statement handle 해제
    2. SQLDisconnect(..): DB 연결 해제
    3. SQLFreeHandle(..): Connection handle 해제
    4. SQLFreeHandle(..): Environment handle 해제

statement 실행

query 직접 입력

  • SQLExecDirect(..): SQL 문 실행

querying의 반복 실행이 없는 경우 가장 적합한 방식.


prepared procedure

  1. SQLBindParameter(..): SQL statement의 param. marker에 버퍼를 bind.
  2. SQLPrepare(..): query 실행을 위한 SQL string을 준비.
  3. SQLExecute(..): prepared statement를 실행. 만약 param. marker가 statement 에 존재한다면 param. marker 변수의 현재 값을 사용.

query 결과 확인

query 결과로부터 데이터 추출

  1. SQLBindCol(..): 어플리케이션 데이터 버퍼를 result set의 column에 bind
  2. SQLFetch(..): result set의 다음 rowset의 데이터를 가져와서 bound된 모든 column에 대한 데이터를 리턴.
  • SQLFetchScroll(..): result set의 다음 rowset의 데이터를 가져와서 bound된 모든 column에 대한 데이터를 리턴. rowset은 절대/상대/북마크 위치로 설정가능.

column-wise, row-wise 등 다양한 데이터 추출 방법이 존재. 참고) Retrieving Results (Advanced) |MSDN


result set 관련 정보 확인

  • SQLDescribeCol(..): result set metadata를 알아내는데 사용
  • SQLColAttribute(..): result set metadata를 알아내는데 사용
  • SQLDecscribeCol VS SQLColAttribute SQLDecscribeCol 은 항상 정해진 5개의 정보를 리턴. SQLColAttribute 는 사용자가 지정한 정보 하나만을 리턴하는 대신에 더욱 다양한 정보에 대해 알아볼 수 있음. SQLDescribeCol and SQLColAttribute |MSDN

  • SQLNumResultCols(..): result set의 column 개수를 반환
  • SQLRowCount(..): UPDATE, INSERT, DELETE로 영향 받는 row의 개수를 반환.

오류 처리

  • SQLError(..): 오류나 스테이터스 정보를 반환

기타 함수

  • SQLGetInfo(..): connection과 관련된 드라이버와 data source에 관한 전반적인 정보를 반환

code example



reference

댓글 없음:

댓글 쓰기