티스토리 뷰

프로그래밍/API

API DB1

에어버스 2016. 5. 6. 15:05

DB

유니코드는 지원 안되나? 예제는 멀티바이트로 진행함.

1. ODBC 데이타 원본 만들기

2. DB연결

SQLRETURN SQLAllocHandle(
  SQLSMALLINT 핸들타입,
  SQLHANDLE 부모핸들,
  SQLHANDLE* 새로만들어질핸들의주소);

<핸들타입>
SQL_HANDLE_ENV     환경핸들
SQL_HANDLE_DBC     연결핸들
SQL_HANDLE_STMT    명령핸들
SQL_HANDLE_DESC    설명자핸들

3. 환경핸들 할당 시 여러 환경 정보 설정하기

SQLRETURN SQLSetEnvAttr(
  SQLHENV        환경핸들
  SQLINTEGER    설정할 환경속성
  SQLPOINTER    속성과 관련된 포인터
  SQLINTEGER    속성 값이 문자일 경우 Value 값의 길이);

4. 데이터 소스 연결하기

SQLRETURN SQLConnect(
  SQLHDBC         연결핸들,
  SQLCHAR*        호스트IP,
  SQLSMALLINT    DB길이,
  SQLCHAR*        id,
  SQLSMALLINT    id길이,
  SQLCHAR*        암호,
  SQLSMALLINT    암호길이);

5. SQL(쿼리)실행

SQLRETURN SQLExecDirect(
  SQLHSTMT        명령핸들,
  SQLCHAR*        SQL문,
  SQLINTEGER      SQL문 길이);

6. 결과값 바인딩

SQLRETURN SQLBindCol(
   SQLHSTMT        명령핸들,
   SQLSMALLINT    바인딩할 컬럼 수서, // 0부터 시작
   SQLSMALLINT    데이타 타입, // C형식의 데이터 타입 지정
   SQLPOINTER      데이터 저장할 버퍼 포인터.
   SQLINTEGER      버퍼 최대크기,
   SQLINTEGER*     버퍼에 저장될 데이터 길이를 저장할 포인터);

7. 결과값 얻기

SQLRETURN SQLFetch(SQLHSTMT 명령핸들);

리턴값이 SQL_NO_DATA 일때까지 반복 실행하면 모든 레코드를 가져온다.
한번 실행할때마다 한 레코드씩 바인딩된 변수에 저장된다.

8. DB연결해제

SQLRETURN SQLFreeHandle(
  SQLSMALLINT    핸들유형,
  SQLHANDLE      해제될 핸들);

<핸들유형>
SQL_HANDLE_ENV 인 경우 
SQLFreeHandle() 호출 전에 그 환경하에 할당된 모든 연결에 대해 먼저 해제해줘야한다. 그렇지 않으면 SQLFreeHandle() 은 SQL_ERROR 리턴되어 환경핸들은 해제되지않고 유효한 상태를 유지하게된다. 

SQL_HANDLE_DBC 인 경우
SQLFreeHandle() 호출 전에 SQLDisconnect()를 먼저 호출해야 한다.

SQL_HANDLE_STMT 인 경우
SQLFreeHandle() 호출 시 모든 자원들을 해제한다.

SQLRETURN SQLDisconnect(SQLHDBC dbc); 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30