Contents
1. 참고링크 [Bottom] [Top]
Microsoft Open Database Connectivity (ODBC) - http://msdn2.microsoft.com/en-us/library/ms710252.aspx
ODBC Programmer's Reference - http://msdn2.microsoft.com/en-us/library/ms714177.aspx
ODBC API Reference - http://msdn2.microsoft.com/en-us/library/ms714562.aspx
C Data Types - http://msdn2.microsoft.com/en-us/library/ms714556.aspx
- ODBC Technical Articles
OLE DB for the ODBC Programmer - http://msdn2.microsoft.com/en-us/library/ms810892.aspx
Using ODBC with Microsoft SQL Server - http://msdn2.microsoft.com/en-us/library/ms811006.aspx
ODBC 함수 요약 정리 http://synch3d.com/wiki/moin/moin.cgi/ODBC
2. ODBC 관련 데이터 타입 [Bottom] [Top]
참고> SQL 기본 정리
SQL 타입 ID
SQL 데이터 타입
C 타입 ID
ODBC C typedef
C 데이터 타입
SQL_CHAR
CHAR(n)
SQL_C_CHAR
SQLCHAR *
unsigned char *
SQL_VARCHAR
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 tagTIME_STRUCT
SQL_TYPE_TIMESTAMP
TIMESTAMP(p)
SQL_C_TYPE_TIMESTAMP
SQL_TIMESTAMP_STRUCT
struct tagTIMESTAMP_STRUCT
- 날짜/시간의 C 데이터 타입 구조
typedef struct tagDATE_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; typedef struct tagTIME_STRUCT { SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT; typedef struct tagTIMESTAMP_STRUCT { SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; SQLUINTEGER fraction; } TIMESTAMP_STRUCT;
3. ODBC API 주요 함수 [Bottom] [Top]
3.1. ODBC 핸들 [Bottom] [Top]
- SQL_HANDLE_ENV
- SQL_HANDLE_DBC
- SQL_HANDLE_STMT
- SQL_HANDLE_DESC
SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType, // 핸들 타입 ( SQLHANDLE InputHandle, // 새로 만들어질 핸들의 부모 핸들. SQLHANDLE * OutputHandlePtr // 새로 만들어질 핸들을 저장할 핸들 변수의 주소. ); SQLRETURN SQLFreeHandle( SQLSMALLINT HandleType, SQLHANDLE Handle );
3.2. ODBC 연결 [Bottom] [Top]
// Local DB/File 연결 함수 SQLRETURN SQLDriverConnect( SQLHDBC ConnectionHandle, // DB 연결 핸들 SQLHWND WindowHandle, // 윈도우 핸들 (사용안함) SQLCHAR * InConnectionString, // 전체/부분 연결 문자열(파일 지정) SQLSMALLINT StringLength1, // 연결 문자열의 길이 SQLCHAR * OutConnectionString, // 연결 완료된 문자열 SQLSMALLINT BufferLength, // 연결 완료된 문자열의 크기 (할당된 크기: 최소 1024) SQLSMALLINT * StringLength2Ptr, // 연결 완료된 문자열의 길이 (반환값) SQLUSMALLINT DriverCompletion // 연결 옵션 (주로 SQL_DRIVER_NOPROMPT 사용) );
3.3. 쿼리 실행 [Bottom] [Top]
// SQL Query 즉시 실행 함수 (SQL 문 준비 과정 없음) SQLRETURN SQLExecDirect( SQLHSTMT StatementHandle, // SQL 명령문 핸들 SQLCHAR * StatementText, // 실행될 SQL 문 SQLINTEGER TextLength // 실행될 SQL 문의 길이 );
// SQL 문에 대한 다음 결과 값을 가져오는 함수 SQLRETURN SQLFetch( SQLHSTMT StatementHandle // SQL 명령문 핸들 );
3.3.1. 정적 바인딩 [Bottom] [Top]
// 결과 값의 열을 바인딩하는 함수 SQLRETURN SQLBindCol( SQLHSTMT StatementHandle, // SQL 명령문 핸들 SQLUSMALLINT ColumnNumber, // 열 값의 순서 (1부터 시작) SQLSMALLINT TargetType, // 열 값의 데이터형 (C Data Type) SQLPOINTER TargetValuePtr, // 바인딩될 변수 SQLINTEGER BufferLength, // 바인딩될 변수의 크기 (고정길이형(정수형,논리형):0) SQLLEN * StrLen_or_Ind // 열 값의 길이/상태값을 반환 받을 변수 );
3.3.2. 동적 바인딩 [Bottom] [Top]
SQLRETURN SQLMoreResults( SQLHSTMT StatementHandle // SQL 명령문 핸들 );
SQLRETURN SQLGetData( SQLHSTMT StatementHandle, // SQL 명령문 핸들 SQLUSMALLINT ColumnNumber, // 열 값의 순서 (1부터 시작) SQLSMALLINT TargetType, // 열 값의 데이터형 (C Data Type) SQLPOINTER TargetValuePtr, // 바인딩될 변수 SQLLEN BufferLength, // 바인딩될 변수의 크기 (고정길이형(정수형,논리형):0) SQLLEN * StrLen_or_IndPtr // 열 값의 길이/상태값을 반환 받을 변수 );
3.4. ODBC 연결 종료 [Bottom] [Top]
SQLRETURN SQLCloseCursor( SQLHSTMT StatementHandle ); SQLRETURN SQLDisconnect( SQLHDBC ConnectionHandle ); SQLRETURN SQLFreeHandle( SQLSMALLINT HandleType, SQLHANDLE Handle );
SQLCloseCursor( hStmt ); // STEP 1 SQLFreeHandle( SQL_HANDLE_STMT, hStmt ); // STEP 2 SQLDisconnect( hDBC ); // STEP 3 SQLFreeHandle( SQL_HANDLE_DBC, hDBC ); // STEP 4 SQLFreeHandle( SQL_HANDLE_ENV, hENV ); // STEP 5
4. ODBC 고급 [Bottom] [Top]
4.1. ODBC 확장열 사용 [Bottom] [Top]
구분
확장열
설명
날짜
날짜
{d 'yyyy-mm-dd'}
시간
{t 'hh:mm:ss'}
타임 스탬프
{ts 'yyyy-mm-dd hh:mm:ss[.f]'}
함수
{fn 함수명(인수)}
ESCAPE 문자
{escape '문자'}
프로시저
{[?=]call 프로시저(인수)}
4.2. SQL 최적화 (준비: Prepare) [Bottom] [Top]
SQLRETURN SQLPrepare( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength ); SQLRETURN SQLExecute( SQLHSTMT StatementHandle );
4.3. 파라미터 사용 [Bottom] [Top]
// 매개변수를 바인딩하는 함수 SQLRETURN SQLBindParameter( SQLHSTMT StatementHandle, // SQL 명령문 핸들 SQLUSMALLINT ParameterNumber, // 매개변수의 순서 (1부터 시작) SQLSMALLINT InputOutputType, // 매개변수의 용도 (입력/출력/입출력) SQLSMALLINT ValueType, // 매개변수의 데이터형 (C Data Type) SQLSMALLINT ParameterType, // 매개변수의 데이터형 (SQL data type ) SQLUINTEGER ColumnSize, // 매개변수의 크기 SQLSMALLINT DecimalDigits, // 매개변수의 자리 수 (정수형일 경우) SQLPOINTER ParameterValuePtr, // 매개변수에 바인딩될 변수 SQLINTEGER BufferLength, // 매개변수에 바인딩될 변수의 크기 (문자열,이진데이터 크기) SQLINTEGER * StrLen_or_IndPtr // 매개변수의 길이/상태값을 반환 받을 변수 );
4.4. ODBC 진단 정보 [Bottom] [Top]
에러
실제값
설명
상태
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
비동기 실행중인 상태.
정상
SQLRETURN SQLGetDiagRec( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR * Sqlstate, SQLINTEGER * NativeErrorPtr, SQLCHAR * MessageText, SQLSMALLINT BufferLength, SQLSMALLINT * TextLengthPtr );
4.5. 스키마(Schema) 정보 [Bottom] [Top]
SQLColumns() - returns the list of column names in specified tables. The driver returns this information as a result set on the specified StatementHandle.
SQLRETURN SQLColumns( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4 );
- SQLTables() - returns the list of table, catalog, or schema names, and table types, stored in a specific data source. The driver returns the information as a result set.
SQLRETURN SQLTables( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * TableName, SQLSMALLINT NameLength3, SQLCHAR * TableType, SQLSMALLINT NameLength4 );
- SQLProcedures() - returns the list of procedure names stored in a specific data source. Procedure is a generic term used to describe an executable object, or a named entity that can be invoked using input and output parameters. For more information on procedures, see the Procedures.
SQLRETURN SQLProcedures( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * ProcName, SQLSMALLINT NameLength3 );
- SQLProcedureColumns() - returns the list of input and output parameters, as well as the columns that make up the result set for the specified procedures. The driver returns the information as a result set on the specified statement.
SQLRETURN SQLProcedureColumns( SQLHSTMT StatementHandle, SQLCHAR * CatalogName, SQLSMALLINT NameLength1, SQLCHAR * SchemaName, SQLSMALLINT NameLength2, SQLCHAR * ProcName, SQLSMALLINT NameLength3, SQLCHAR * ColumnName, SQLSMALLINT NameLength4 );
