ODBC 이용 서버 접속 함수정리

kentaro81의 이미지

ODBC Connect

작성일 : 29 April 2009
작성자 : 최소영

1. 구현방식
SQL의 직접적인 연결은 까다로운 접속환경과 각 DBMS마다 각기 다른 SQL을 가지고 있기 때문에 접근이 어려웠지만, ODBC(Open Data Base Connectivity)를 통해 손쉽게 데이터의 접근이 가능하다. ODBC 에서는 표준 SQL구문을 사용하고 있으며, 자동으로 각기 다른 SQL문으로 변환이 가능하다. 따라서 ODBC에서 SQL접속을 설정해두고, ODBC를 통해 표준 쿼리문을 사용한다면 여러 DBMS 에서 원하는 자료를 재가공할 수 있다.

2. 사용API
sql.h
windows.h
sqlext.h

3. 사용함수

SQLRETURN SQLAllocHandle (
__in SQLSMALLINT HandleType,
__in SQLHANDLE InputHandle,
__out SQLHANDLE * OutputHandle );
첫번째 인자 : 핸들의 타입을 설정(SQL_HANDLE_ENV / SQL_HANDLE_DBC / SQL_HANDLE_STMT / SQL_HANDLE_DESC) env :환경설정, dbc :연결설정, stmt :명령전달, desc : 설명
두번째 인자 : 입력에 사용될 핸들값( 필요 핸들값 : dbc 는 env를 반드시 필요로 하며, stmt 는 반드시 obc 가 필요하다. 이러한 핸들의 순서로 연관된다.)
세번째 인자: 값을 입력 받을 핸들값
사용 : 핸들 값을 생성하기 위함.

SQLRETURN SQLSetEnvAttr(
__in EnvironmentHandle,
__in SQLINTEGER Attribute,
__in SQLPOINTER ValuePtr,
__in SQLINTEGER StringLength );
첫번째 인자 : 환경핸들 ID
두번째 인자 : 속성값
세번째 인자 : ODBC의 버전 및 속성
네번째 인자 : 세번째 인자의 크기
사용 : SQL환경변수를 셋팅.

SQLRETURN SQLConnect(
__in SQLHDBC ConnectionHandle,
__in SQLCHAR * ServerName,
__in SQLSMALLINT NameLength1,
__in SQLCHAR * UserName,
__in SQLSMALLINT NameLength2,
__in SQLCHAR * Authentication,
__in SQLSMALLINT NameLength3 );
첫번째 인자 : 연결핸들 ID
두번째 인자 : 서버이름
세번째 인자 : 두번째 인자 크기
네번째 인자 : 접속ID
다섯번째 인자 : 네번째 인자 크기
여섯번째 인자 : 비밀번호
일곱번째 인자 : 다섯번째 인자 크기
사용 : ODBC 에 접속

SQLRETURN SQLExecDirect(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength );
첫번째 인자 : 명령핸들 ID
두번째 인자 : 쿼리문장
세번째 인자 : 두번째 인자의 크기
사용 : 쿼리문을 실행

SQLRETURN SQLBindCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLSMALLINT TargetType,
SQLPOINTER TargetValuePtr,
SQLINTEGER BufferLength,
SQLLEN * StrLen_or_Ind );
첫번째 인자 : 명령핸들 ID
두번째 인자 : 칼럼번호
세번째 인자 : 칼럼 데이터 타입
네번째 인자 : 연결할 변수
다섯번째 인자 : 네번째 인자의 크기
여섯번째 인자 : fetch 를 하였을 때 리턴 값을 받을 변수의 크기
사용 : 칼럼을 변수로 바인딩

SQLRETURN SQLFetch(
SQLHSTMT StatementHandle );
첫번째 인자 : 명령핸들 ID
사용 : 다음 레코드로 명령 행을 옮김.

SQLRETURN SQLCloseCursor(
SQLHSTMT StatementHandle );
첫번째 인자 : 명령핸들 ID
사용 : 레코드 지시자 를 초기화 하며 제거한다.

SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle );
첫번째 인자 : 핸들타입
두번째 인자 : 핸들ID
사용 : 해당 핸들을 삭제한다. (메모리 영역 포인트 삭제)

SQLRETURN SQLDisconnect(
SQLHDBC ConnectionHandle );
첫번째 인자 : 연결핸들 ID
사용 : ODBC와의 연결을 해지한다.

Epilogue

SQL의 직접적인 연결은 생각보다 복잡하다. 특히 ID 인증과정이…… 하지만 ODBC를 거치면 아주 간단해진다. (API 가 나와 있으니깐…)
일단 ODBC와 연결을 통해 SQL에 접속을 하게 되면 각 칼럼별 바인드를 통해 변수에 칼럼에 해당되는 값들을 받아오는데, 이때 칼럼의 위치를 옮겨 줘야 변경된 값을 변수로 받아오게 된다. 따라서 접속후의 순서는 제일먼저 쿼리를 실행하고, 바인드를 한후에 패치를 이용해서 레코드 값을 옮겨가며 값을 받아온다. 이때 패치후 에는 반드시 SQLCloseCursor 를 통해 커서를 종료시켜 주어야 다음 패치 시에 기대 값을 받을 수 있다.
사용을 한 핸들값은 반드시 Free해주어야 한다. 물론 ODBC연결 또한 해지를 해야 하고……

File attachments: 
첨부파일 크기
Microsoft Office document icon ODBC Connect.doc43.5 KB
Forums: 

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.