블로그 이미지
충남대학교대학원 컴퓨터공학과 박사1년차 석박사통합과정 데이터베이스시스템연구실 Yim, Hyung-jun

 
 

MSSQL Server 2008 ODBC Connection Sample (C++)

Extra Interest | 2008/12/12 21:29 | Posted by Yim, Hyung-jun

이번 데이터베이스시스템 특강 과제인 TPC-H (Transaction Processing Performace Council) Benchmark를 위해 내가 맡은 부분은 MSSQL이었다.
- KAIROS (MMDBMS)
- Oracle 11g (RDBMS)
- MySQL (RDBMS)
등의 다른 DBMS도 있었지만, 같은 팀의 어떤 분이 Benchmark 코드를 먼저 해놓으셔서 MSSQL에 ODBC로 연결하여 테스트 해보는 것이다.
이 과정에서 ODBC 연결이 나름 (?) 문제가 있어서 여기 저기 찾아보다가 딱 맞는 답이 없어서 여기에다가 정리해 보았다.


* 환경
- 운영체제: Windows Server Enterprise 2008 SP1
- CPU: Intel(R) Core(TM)2 Duo CPU E6750 2.66GHz
- RAM: 2GB

1. Microsoft VIsual Studio Team System 2008 설치
2. Micorsoft SQL Server 2008 설치
3. 이 둘을 연결하기 위한 ODBC 설정
- 시작 → 제어판 → 관리도구 → 데이터 원본 (ODBC) → 추가 → 맨 아래의 SQL Server 선택 → 이름: 사용할 이름, 설명, 연결 서버: 서버 이름이나 IP 주소 입력 → 인증 방법 선택 (필요할 경우 ID와 암호 입력)  → 설정을 변경하거나 Default 사용 → 설정을 변경하거나 Default 사용 → 테스트가 완료되는지 확인



* 이 과정에서 로컬 PC에 SQL Server 2008이 설치된 것이 아니라 네트워크를 통해 접근을 하려면 다음과 같은 과정이 필요하다. (네트워크로 연결된 MSSQL Server 2008이 설치된 PC에서의 설정)
- 시작 → 모든 프로그램 → Microsoft SQL Server 2008 → 구성 도구 → SQL Server 구성 관리자 → SQL Server 네트워크 구성 → MSSQLSERVER에 대한 프로토콜 → 공유 메모리와 TCP/IP의 사용을 "예"로 설정


4. C++ Win32 Console 프로그램을 통한 연결 확인

예제 소스 다운로드
MSSQLConn.zip


// MSSQLConn.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.

#include "stdafx.h"

#include <windows.h>
#include <sql.h>
#include <sqlext.h>

SQLHENV  hEnv  = SQL_NULL_HENV;
SQLHDBC  hDbc  = SQL_NULL_HDBC;
SQLHSTMT hStmt  = SQL_NULL_HSTMT;

#define  szDSN  "serverName"
#define  szUID  "userID"
#define  szPasswd "password"

#define  MAXBUFLEN 255

void  ProcessLogMessages(HENV plm_henv, HDBC plm_hdbc, HSTMT plm_hstmt, char *logstring);
BOOL  MSSQLConnect();
void  MSSQLDisConnect();

int _tmain(int argc, _TCHAR* argv[])
{
 MSSQLConnect();
 MSSQLDisConnect();

return 0;
}

BOOL MSSQLConnect()
{
 // 연결 설정을 위한 변수들
 SQLRETURN Ret;

 // 환경 핸들을 할당하고 버전 속성을 설정
 if (SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv) != SQL_SUCCESS) {
  ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Failed!!\n\n");
  return FALSE;
 }

 if (SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) != SQL_SUCCESS) {
  ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Failed!!\n\n");
  return FALSE;
 }

 // 연결 핸들을 할당하고 연결
 if (SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc) != SQL_SUCCESS) {
  ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Failed!!\n\n");
  return FALSE;
 }

 Ret = SQLConnect(hDbc,(SQLCHAR *)szDSN,SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)szPasswd,SQL_NTS);

 if ((Ret != SQL_SUCCESS) && (Ret != SQL_SUCCESS_WITH_INFO)) {
  ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Failed!!\n\n");
  return FALSE;
 }

 // 명령 핸들을 할당
 if (SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&hStmt) != SQL_SUCCESS) {
  ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Failed!!\n\n");
  return FALSE;
 }

 ProcessLogMessages(hEnv, hDbc, hStmt, "MSSQLConnect() Successed!!\n");

 return TRUE;
}

void MSSQLDisConnect()
{
 if (hStmt) SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
 if (hDbc) SQLDisconnect(hDbc);
 if (hDbc) SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
 if (hEnv) SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

 printf("\nSQLDisconnect() Successed!!\n");
}

void ProcessLogMessages(HENV plm_henv, HDBC plm_hdbc, HSTMT plm_hstmt, char *logstring)
{
 RETCODE plm_retcode = SQL_SUCCESS;
 UCHAR plm_szSqlState[MAXBUFLEN] = "";
 UCHAR plm_szErrorMsg[MAXBUFLEN] = "";
 SDWORD plm_pfNativeError = 0L;
 SWORD plm_pcbErrorMsg = 0;
 
 printf(logstring);
 
 while (plm_retcode != SQL_NO_DATA_FOUND) {
  plm_retcode = SQLError(plm_henv, plm_hdbc, plm_hstmt, plm_szSqlState, &plm_pfNativeError, plm_szErrorMsg, MAXBUFLEN - 1, &plm_pcbErrorMsg);
  
  if (plm_retcode != SQL_NO_DATA_FOUND){
   printf("szSqlState    = %s\n", plm_szSqlState);
   printf("pfNativeError = %d\n", plm_pfNativeError);
   printf("szErrorMsg    = %s\n", plm_szErrorMsg);
   printf("pcbErrorMsg   = %d\n", plm_pcbErrorMsg);
  }
 }
}

* 여기서도 중요한 것은 Visual Studio 에서의 설정이다. Char에 대한 인코딩 문제가 있어서 프로젝트 속성 → 일반 속성 → 일반 → 프로젝트 기본값 → 문자 집합의 속성을 멀티바이트 속성을 사용으로 설정해줘야 함



JBoss, Spring, Drools

Extra Interest | 2008/07/25 00:02 | Posted by Yim, Hyung-jun

2008년 7월 24일 (목) 오후 5시




JBoss와 Spring Framework에 대한 지난 발표 자료를 토대로 비교 아닌 비교를 했다.
또한, Drools라는 것은 개념이 간단하게 동작해서 Rule기반의 Semantic을 표현할 수 있을 듯하다. 하지만, 그 이용 가치에 대해서는 확신이 서지 않는다.

Spring Framework & JBoss ESB, jBPM

Extra Interest | 2008/05/29 15:02 | Posted by Yim, Hyung-jun

2008년 5월 27일 (화) 발표
Spring Framework & JBoss ESB, jBPM

- Spring Framework Overview
- JBoss ESB & jBPM



JBoss Enterprise SOA Platform, Portals

Extra Interest | 2008/04/13 20:58 | Posted by Yim, Hyung-jun

2008년 4월 8일 (화) 오전 11시
JBoss Enterprise SOA Platform, Portals

■ JBoss Application Platform
- 상태 복제 (State Replication) 부연 설명

■ SOA (Service-Oriented Architecture)

■ JBoss Enterprise SOA Platform
- SOA Redefined
- Components
- Strategy
- JBossESB (Enterprise Service Bus)

■ JBoss Application Platform for Portal

목적이 불분명한 설명 자료,
그 이유는?



'Extra Interest' 카테고리의 다른 글

JBoss, Spring, Drools  (0) 2008/07/25
Spring Framework & JBoss ESB, jBPM  (0) 2008/05/29
JBoss Enterprise SOA Platform, Portals  (0) 2008/04/13
JBoss Application Platform - Clustering  (0) 2008/03/26
[임형준]20080304 JBoss Application Platform  (0) 2008/03/12
[임형준]20070818 JBoss  (0) 2008/03/12

JBoss Application Platform - Clustering

Extra Interest | 2008/03/26 01:36 | Posted by Yim, Hyung-jun
JBoss Application Platform에 대한 부분적인 보완 내용이 포함된 문서입니다.
- JGroup
- JBoss Cache

- 성능 감소요인
- Clustering (성능 향상을 위한 기능)
State Replication (상태 복제)
Load Balancing (부하 분산)
Failover (자동 장애 복구)

에 대한 내용입니다.

'Extra Interest' 카테고리의 다른 글

JBoss, Spring, Drools  (0) 2008/07/25
Spring Framework & JBoss ESB, jBPM  (0) 2008/05/29
JBoss Enterprise SOA Platform, Portals  (0) 2008/04/13
JBoss Application Platform - Clustering  (0) 2008/03/26
[임형준]20080304 JBoss Application Platform  (0) 2008/03/12
[임형준]20070818 JBoss  (0) 2008/03/12

[임형준]20080304 JBoss Application Platform

Extra Interest | 2008/03/12 01:35 | Posted by Yim, Hyung-jun
JBoss Application Platform

작년에 전반적으로만 발표했던 JBoss가 이젠 세부적인 내용까지 분석하는 것으로 변경되었다. 그 때의 일을 맡지만 않았어도 지금 이렇게 고생하지는 않을텐데 말이다.
하지만, 주어진 일이니깐 배운다는 자세로 수많은 문서들을 그것도 영문으로 되어 있는 문서들을 보는데 힘들다..

JBossJBoss Enterprise Middleware System (JEMS)로 모든 기능을 포함하고 있는데,
- JBoss Application Platform
- JBoss Enterprise SOA Platform
- JBoss Application Platform for Portals
이 3가지로 구분지어서 생각하면 될 것 같다. 아니, 솔직히 이렇게 구분되어 있다고 내가 판단했다. SOA의 개념을 안에서 사용하고 있는데 새롭게 알게 된 개념인 Aspect Oriented Programming (AOP)이 중요하다고 하는데 이렇게 봐서는 알 수가 없다.

김건중 교수님이 정작 원하는 내용은 System Performance였는데, 미리 알고 있었다면 그 부분에 대해서 중점적으로 다뤘을텐데 아쉽다. 덕분에 한 번더 하고, 나머지 2개를 더 해야 하지만..
System Performance를 향상시키기 위해 JBoss에서는 Clustering이라는 개념을 사용한다.
Clustering은 다음의 3가지로 기능을 제공한다.
- State Replication
- Load-balancing
- Failover

자세한 내용은 TP 속으로..

'Extra Interest' 카테고리의 다른 글

JBoss, Spring, Drools  (0) 2008/07/25
Spring Framework & JBoss ESB, jBPM  (0) 2008/05/29
JBoss Enterprise SOA Platform, Portals  (0) 2008/04/13
JBoss Application Platform - Clustering  (0) 2008/03/26
[임형준]20080304 JBoss Application Platform  (0) 2008/03/12
[임형준]20070818 JBoss  (0) 2008/03/12

[임형준]20070818 JBoss

Extra Interest | 2008/03/12 01:26 | Posted by Yim, Hyung-jun
JBoss

Open Source Software 진영의 SOA를 지원하기 위한 Middleware이다. 처음에는 단지 Websphere나 Apache Tomcat 같은 웹서버인지 알고 시작했는데, 그 보다는 한 단계 위인 듯 보인다. 물론 100% 자바기반으로 되어 있어 플랫폼이나 하드웨어에 영향을 받지 않고 사용할 수 있지만 개략적으로만 살펴 본 2007년 8월 18일이었기 때문에 정확한 판단은 유보였다.

김건중 교수님 (전기공학전공)과 이규철 교수님 (지도교수님)과 같이 진행하는 프로젝트, 같이 진행하기 보다는 김건중 교수님 프로젝트에 도움을 주는 관계로 보는 게 맞는 것 같다, 얼떨결에 내가 맡아서 발표를 했다.

이 때의 발표가 오늘의 연장선이 될줄은 꿈에도 몰랐다.

'Extra Interest' 카테고리의 다른 글

JBoss, Spring, Drools  (0) 2008/07/25
Spring Framework & JBoss ESB, jBPM  (0) 2008/05/29
JBoss Enterprise SOA Platform, Portals  (0) 2008/04/13
JBoss Application Platform - Clustering  (0) 2008/03/26
[임형준]20080304 JBoss Application Platform  (0) 2008/03/12
[임형준]20070818 JBoss  (0) 2008/03/12
TAG jboss, SOA