티스토리 뷰
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);