|
확 인 |
|
문서 번호 |
2015-BIT-001 |
보존 기간 |
6개월 |
보고 일자 |
2015.03.19(목) |
작성자 |
박종현 |
ODBC의 개요
<기술문서>
SunmoonBit 29기
박종현
목차
1. ODBC(Open Database Connectivity)란? ------------- 3)
2. ODBC를 지원하는 Database 종류 ------------- 3)
3. ODBC의 구조 ------------- 4)
4. ODBC의 데이터 타입 ------------- 5)
5. ODBC의 진단 정보 ------------- 5)
6. ODBC 핸들(환경, 연결, 명령) ------------- 6)
6.1. 핸들의 종류 -------------
6)
6.1.1. 환경 핸들 -------------
6)
6.1.2. 연결 핸들 -------------
7)
6.1.3. 명령 핸들 -------------
7)
7. ODBC 설정 방법 ------------- 8)
1.ODBC[Open DataBase Connectivity]란?
마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 각 데이터베이스의 차이는 ODBC 드라이버에 흡수되기 때문에 사용자는 ODBC에 정해진 순서에 따라서 프로그램을 쓰면 접속처의 데이터베이스가 어떠한 데이터베이스 관리 시스템에 관리되고 있는지 의식할 필요 없이 접근할 수 있다.
출처 : [네이버 지식백과] ODBC [open database connectivity]
2.ODBC를 지원하는 Database종류
- SQL Server
- Microsoft Access
- Microsoft FoxPro
- dBase
- Paradox
- Microsoft Oracle OBDC
- Text Files
3.ODBC의 구조
그림 1
그림1은 ODBC의 구조이다. 하단에는 실제 데이터 소스가 존재하며 개별 DBMS 및 기타 파일 시스템이 있다. 각각의 Database 들은 자신의 데이터 소스를 접근할 수 있도록 ODBC규약에 맞는 드라이버를 제공한다. 이 드라이버가 시스템에 설치 되면, 각각의 데이터 소스에 접근하기 위하여 개발자는 각 벤더들마다 상이한 인터페이스 대신에 표준화된 ODBC API만 알고 있으면 데이터 소스를 쉽게 액세스 할 수 있게 된다. ODBC 드라이버 관리자가 각 DBMS 벤더들이 제공하는 드라이버와 ODBC API를 연결해 주기 때문이다.
4.ODBC의 데이터 타입
SQL Type ID |
SQL Data Type |
C Type ID |
OBDC C Typedef |
C Data Type |
SQL_CHAR |
CHAR(n) |
SQL_C_CHAR |
SQLCHAR* |
unsigned char * |
SQL_VACHAR |
VARCHAR(n) |
SQL_C_CHAR |
||
SQL_WCHAR |
WCHAR(n) |
SQL_C_WCHAR |
SQLWCHAR* |
Wchar_t* |
SQL_WVARCHAR |
VARWCHAR(n) |
SQL_C_WCHAR |
||
|
|
SQL_C_TCHAR |
SQLTCHAR* |
|
SQL_BIGINT |
BIGINT |
SQL_C_SBIGINT |
SQLBIGINT |
__int64 |
SQL_INTEGER |
INTEGER |
SQL_C_SLONG |
SQLINTEGER |
long int |
SQL_SMALLINT |
SMALLINT |
SQL_C_SSHORT |
SQLSMALLINT |
short int |
SQL_TINYINT |
TINYINT |
SQL_C_UTINYINT |
SQLCHAR |
unsigned char |
SQL_REAL |
REAL |
SQL_C_FLOAT |
SQLREAL |
float |
SQL_FLOAT |
FLOAT(p) |
SQL_C_DOUBLE |
SQLFLOAT |
Double |
SQL_DOUBLE |
DOUBLE |
SQLDOUBLE |
||
SQL_BINARY |
BINARY(n) |
SQL_C_BINARY |
SQLCHAR* |
Unsigned char * |
SQL_VARBINARY |
VARBINARY(n) |
SQL_C_BINARY |
||
SQL_TYPE_DATE |
DATE |
SQL_C_TYPE_DATE |
SQL_DATE_STRUCT |
struct tagDATE_STRUCT |
SQL_TYPE_TIME |
TIME(p) |
SQL_C_TYPE_TIME |
SQL_TIME_STRUCT |
struct tagTIMEM_STRUCT |
SQL_TYPE_TIME STAMP |
TIMESTAMP(p) |
SQL_C_Type_Time Stamp |
SQL_TIMESTAMP_STRUCT |
struct tagTIMESTAMP_STRUCT |
5.ODBC의 진단 정보
에러 |
실제값 |
설명 |
상태 |
SQL_SUCCESS |
0 |
함수 호출 성공. |
성공 |
SQL_SUCCESS_WITH_INFO |
1 |
함수 호출 성공 & 경고 발생. |
정상 / 심각 |
SQL_ERROR |
-1 |
일반적인 오류 발생. |
심각 |
SQL_INVALID_HANDLE |
-2 |
핸들 오류 발생. |
심각 |
SQL_NO_DATA |
100 |
읽을 데이터 없음. 일반적으로 EOF 상태. |
정상 |
SQL_NEED_DATA |
99 |
추가 정보 필요. |
선택 |
SQL_STILL_EXECUTING |
2 |
비동기 실행중인 상태. |
정상 |
6.ODBC 핸들(환경, 연결, 명령)
ODBC는 정보 저장을 위해 핸들을 사용한다. HDC, HWND 등의 일반적인 핸들과 사용하는 목적이나 방법은 동일하다.
6.1핸들의 종류
ODBC는 환경, 연결, 명령, 설명자의 4가지 핸들을 사용하는데 설명자 핸들은 잘 사용되지 않는다.
6.1.1환경핸들
환경(Environment)에는 데이터 액세스에 필요한 여러 가지 정보들이 저장되는데 이 정보들은 본질적으로 전역적이다. 환경의 현재 상태, 진단 정보, 환경의 속성등이 환경에 저장되는 정보들이며 무엇보다 중요한 것은 연결에 관련된 정보들이다.
SQLSetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
1번째 인자는 환경핸들, 2번째 인자는 설정하고자 하는 속성의 종류, 3번째 인자는 속성 값, 4번째 인자는 속성값의 길이이다.
예제)
CozySQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&hEnv);
SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
6.1.2연결핸들
연결(Connection)은 사용할 데이터 소스와 드라이버에 대한 정보를 가지며 연결 핸들에는 연결의 상태, 진단 정보, 명령 핸들과 설명자 핸들의 목록, 연결의 속성 등의 정보가 포함된다.
예제)
SQLAllocHandle(SQL_HANDLE_DBC, hEnv,&hDbc);
6.1.3명령핸들
명령 핸들을 할당한 후 곧바로 명령을 실행할 수 있다. 명령을 실행하는 방법에는 크게 4가지가 있지만 제일 간단한 방법은 명령 핸들에 곧바로 명령을 보내주는 것이다. 다음 함수를 사용한다.
SQLRETURN SQLExecDirect(
SQLHSTMT StatementHandle, //명령핸들
SQLCHAR* StatemnetText, //실행할 SQL문
SQLINTEGER TextLength //SQL문의 길이
);
예제)
TCHAR szSQL[256];
wsprintf(szSQL, "Insert into Stu (name, age) VALUES ('%s', %d)", Name, Age);
-검색
SQLExecDirect(hStmt,(SQLCHAR*)“select name from Stu”,SQL_NTS);
-추가
“Insert into Stu (name, age) VALUES (‘%s’,%d)”,Name,Age);
-삭제
“Delete from Stu where name=‘%s’”
![]() |
7.ODBC 설정 방법
ODBC를 설정하기 위하여 우선 제어판 -> 관리도구 -> 데이터 원본(ODBC)를 실행합니다.
‘ODBC 데이터 원본 관리자’가 실행되면 추가를 눌러줍니다.
‘새 데이터 원본 만들기’창에서 자신이 사용할 DB형식에 맞게 선택하고 마침을 눌러줍니다.
‘SQL Server에 새로운 데이터 원본 만들기’에 적절한 내용을 채워줍니다.
-이름 : 외부에 보여질 이름
-설명 : 외부에 보여질 설명
-서버 : 연결할 서버의 주소
일반적으로 ‘사용자가 입력한 로그인 ID 및 암호를 사용하는 SQL Server인증 사용’으로 선택한 다음 SA계정이나 로그인용 계정과 비밀번호를 넣어 주면 됩니다. 하지만 SA계정은 잘 알려진 SQL Server 계정이므로 악의적인 사용자의 공격 대상이 되는 경우가 많아 SA계정은 응용 프로그램에서 요청하지 않는 한 사용하지 않기를 권장 합니다.
해당계정이 접근 가능한 데이터베이스나 사용할 데이터베이스를 지정하려면 ‘기본 데이터 베이스를 다음으로 변경’을 선택합니다. (‘Master’를 사용하려면 체크하지 않아도 된다)
특별히 사용할 항목이 없으면 마침을 눌러줍니다.
마침을 눌러주면 ‘ODBC Microsoft SQL Server 설정’이라는 창이 뜹니다.
![]() |
정상적으로 ODBC가 생성되었다면 아래와 같이 추가한 파일이 보입니다.
|