일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 데이터베이스
- 설치
- MySQL
- WIN32 SDK
- Visual Basic
- 델파이
- 입문
- 초보
- VB.NET
- 예제
- SDK
- 시리얼 통신
- 소니
- c#
- Visual Studio 2005
- 파라미터
- MFC
- dll
- xml
- Delphi
- 기초
- 인스톨
- SQL
- PostgreSQL
- vb
- 파이어버드
- 셋업
- winsock
- Firebird
- 문자열
- Today
- Total
프로그래밍 노트
msado15.dll을 이용해서 MFC에서 ADO로 데이테베이스 억세스하기 본문
여기서 데이터베이스는 MySQL을 썼다.
다른 데이터베이스를 쓸때는 접속 문자열을 바꾸어 주면 될 것같다.
예제는 hong 데이터베이스의 animal 테이블의 필드명과
데이터를 직접 실행 창에 출력하는 예제이다.
TRACE함수는 MFC의 함수라는 것을 이번에 처음 알았다. -.-;;
#include "stdafx.h"
#include "stdio.h"
#include "io.h"
// ADO DLL 임포트
#import "C:\Program files\Common Files\System\Ado\msado15.dll" no_namespace rename("EOF", "ADOEOF")
int main()
{
HRESULT hr;
// COM 라이브러리 초기화
CoInitialize(NULL);
try {
_ConnectionPtr pConn;
_RecordsetPtr pRs;
hr = pConn.CreateInstance(__uuidof(Connection));
hr = pRs.CreateInstance(__uuidof(Recordset));
pConn->CursorLocation = adUseClient;
// MySQL ODBC 접속 문자열
_bstr_t strConn("DRIVER={MySQL ODBC 3.51 Driver};SERVER = localhost;DATABASE = hong;UID = hong; PWD = hong;");
// 데이터베이스 접속
hr = pConn->Open(strConn, "", "", adConnectUnspecified);
// 레코드셋 설정
hr = pRs->Open("select * from animal", pConn.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);
_variant_t vtColumn;
_variant_t vtNull;
vtNull.ChangeType(VT_NULL);
TCHAR strDisp[MAX_PATH+1];
short i;
long nRow = pRs->Fields->Count; // 레코드수 취득
// 필드명 표시
for (i = 0; i < nRow; i++)
{
// 필드명 취득
vtColumn = pRs->Fields->GetItem(i)->Name;
vtColumn.ChangeType(VT_BSTR);
lstrcpyn(strDisp, (_bstr_t)vtColumn, MAX_PATH);
if (i == nRow - 1) {
TRACE("%s\n", strDisp);
} else {
TRACE("%s,", strDisp);
}
}
pRs->MoveFirst();
// 필드값 표시
if(!pRs->ADOEOF)
{
while(!pRs->ADOEOF)
{
for (i = 0; i < nRow; i++)
{
vtColumn = pRs->GetCollect(i);
// 데이터가 NULL이면 ""을 대입
if (vtColumn == vtNull) {
vtColumn = _variant_t("");
} else {
vtColumn.ChangeType(VT_BSTR);
}
lstrcpyn( strDisp, (_bstr_t)vtColumn, MAX_PATH );
if (i == nRow - 1) {
TRACE("%s\n", (LPCSTR)strDisp);
} else {
TRACE("%s,", (LPCSTR)strDisp);
}
}
pRs->MoveNext();
}
}
hr = pRs->Close();
} catch(_com_error &e) {
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("Error:%s\n", (LPCSTR) bstrDescription);
}
}