Database 연동

C++ 2010. 10. 22. 02:53

Visual C++과 mysql 데이터 베이스 연동 방법 정리


**. 용어
    dynaset  : DB 값이 동적 연결되어 즉시 변경됨.(rollback 미지원)
    snapshot : DB 값 변경시 다시 적용해야함. (commit, rollback 지원)

**. DB 샘플 정보
DSN 이름 : mysqld
database : test
UID/PWD : root/root

drop table TEST;
create table TEST
(
t_str varchar(10),
t_blob blob
);  
insert into TEST values ('hi~`, 'hi man~~~~');



ODBC



OLEDB
mysql 지원 하지 않음.
타 DB(mssql, MS Access)의 경우는 project 생성시 선택 
혹은 Class View 에서 Add > Class 메뉴로 "ATL > ATL OLEDB Consumer" 로 작성 가능



mysql connector/c++ 사용




ADO



DAO
dynaset 지원.
개인용 DB처럼 가벼운 경우 적하며 MFC의 CDaoDatabase(deprecated) 사용




[mysql 관련 주의 사항]
**. 주의 1 - ODBC 버그
mysql.com 에서 최신 버전인 Connector/ODBC 5.1.7 를 설치했더니 버그 때문에 DSN이 정상적이지 않다.
이전 버전인  Connector/ODBC 3.51.27 설치 해야 한다.
(나의 환경은 Windows XP service pack2, mysql 5.1 (character set  utf8)
**. 주의 2 - 영문 꺠지는 현상
mysql에서 데이터를 가져올 때 영문이 깨진다.
유니 코드를 위해서 바인딩 할때 (SQLBindCol 함수) SQL_C_CHAR 대신 SQL_C_TCHAR를 써야 한다.
TCHAR 처럼 T가 붙은 자료형을 제공한다.

**. 주의 3 - 한글 꺠지는 현상
이젠 한글만 깨진다. (mysql 5.1, character set utf8)

solution 1. DSN 설정 > Connect Options > Character Set 을 utf8로 설정한다.


solution 2.  소스에서 "set names euckr"를 한번 mysql에 쏴주면 되긴 한다.
if (SQLExecDirect(hStmt, (SQLTCHAR*)_T("set names euckr"), SQL_NTS) != SQL_SUCCESS)
{
print(_T("SQLAllocHandle stmt error"));
}

cmd에서 mysql에 접속하여 볼때도 마찬가지로 "set names euckr"을 해줘야 깨지지 않고 잘 나온다.
(일본어도 잘 나온다)


참고로 mysql의 데이터 문제라고 생각되어질때 MySQL Workbench로 접속하여 편하게 확인 할 수 있다.
**. 주의 4 - mysql 재설치시 응답 없음 현상
"Write Configuration file" 단계에서 응답 없음 현상.
solution.
프로그램 설치 삭제
설치 디렉토리 삭제
"C:\Documents and Settings\All Users\Application Data\MySQL" 삭제
재설치 재시도.







'C++' 카테고리의 다른 글

DLL (Dynamic Link Library)  (0) 2010.10.27
mysql connector/c++  (1) 2010.10.26
ODBC (open database connectivity)  (1) 2010.10.25
현재 위치 __FILE__, __LINE__, __FUNCTION__  (0) 2010.10.23
struct padding (구조체 패딩) 문제  (0) 2010.10.21
UDP (User Datagram Protocol)  (0) 2010.10.19
TCP (Transmission Control Protocol)  (2) 2010.10.19
Overlapped Model  (0) 2010.10.19