5월 30, 2016

ODBC API


연결 과정

  1. ODBC Data Source 설정 참고)windows 10에서 ODBC data source 설정 방법
  2. DB에 연결
    1. Header 파일 include: sql.h , sqltypes.h , sqlext.h
    2. SQLAllocHandle(..): Environment handle (object) 할당
    3. SQLSetEnvAttr(..): Environment handle 설정
    4. SQLAllocHandle(..): Connection handle (object) 할당
    5. SQLSetConnectAttr(..): Connection handle 설정
    6. SQLConnect(..) (또는 SQLDriverConnect(..)): DB와 연결
    7. SQLDriverConnect(..)는 GetDesktopWindow() 사용해 windows.h 사용.

    8. SQLAllocHandle(..): Statement handle (object) 할당
    9. (SQLSetStmtAttr(..): Statmenet handle 설정)

    ODBC API에 param.로 char string을 전달 시 반드시 wchar 형으로 전달해야 함. 참고) wide character type (wchar_t) 란?

  3. statement 실행
  4. Query 결과 확인
  5. DB와의 연결 해제
    1. SQLFreeHandle(..): Statement handle 해제
    2. SQLDisconnect(..): DB 연결 해제
    3. SQLFreeHandle(..): Connection handle 해제
    4. SQLFreeHandle(..): Environment handle 해제

statement 실행

query 직접 입력

  • SQLExecDirect(..): SQL 문 실행

querying의 반복 실행이 없는 경우 가장 적합한 방식.


prepared procedure

  1. SQLBindParameter(..): SQL statement의 param. marker에 버퍼를 bind.
  2. SQLPrepare(..): query 실행을 위한 SQL string을 준비.
  3. SQLExecute(..): prepared statement를 실행. 만약 param. marker가 statement 에 존재한다면 param. marker 변수의 현재 값을 사용.

query 결과 확인

query 결과로부터 데이터 추출

  1. SQLBindCol(..): 어플리케이션 데이터 버퍼를 result set의 column에 bind
  2. SQLFetch(..): result set의 다음 rowset의 데이터를 가져와서 bound된 모든 column에 대한 데이터를 리턴.
  • SQLFetchScroll(..): result set의 다음 rowset의 데이터를 가져와서 bound된 모든 column에 대한 데이터를 리턴. rowset은 절대/상대/북마크 위치로 설정가능.

column-wise, row-wise 등 다양한 데이터 추출 방법이 존재. 참고) Retrieving Results (Advanced) |MSDN


result set 관련 정보 확인

  • SQLDescribeCol(..): result set metadata를 알아내는데 사용
  • SQLColAttribute(..): result set metadata를 알아내는데 사용
  • SQLDecscribeCol VS SQLColAttribute SQLDecscribeCol 은 항상 정해진 5개의 정보를 리턴. SQLColAttribute 는 사용자가 지정한 정보 하나만을 리턴하는 대신에 더욱 다양한 정보에 대해 알아볼 수 있음. SQLDescribeCol and SQLColAttribute |MSDN

  • SQLNumResultCols(..): result set의 column 개수를 반환
  • SQLRowCount(..): UPDATE, INSERT, DELETE로 영향 받는 row의 개수를 반환.

오류 처리

  • SQLError(..): 오류나 스테이터스 정보를 반환

기타 함수

  • SQLGetInfo(..): connection과 관련된 드라이버와 data source에 관한 전반적인 정보를 반환

code example



reference

5월 27, 2016

ODBC Fundamentals: Descriptor Handles

descriptor란 어플리케이션이나 드라이버에게 보여지는 SQL statment의 param. 나 result set의 칼럼과 같은 메타데이터의 collection을 의미한다. descriptor는 다음 네가지 중 어떠한 역할도 맡을 수 있다.

  • Application Parameter Descriptor (APD).
  • SQL statement의 param.에 bound된 어플리케이션 버퍼에 대한 정보(그 버퍼의 주소, 크기, C data types 등)을 가짐.
  • Implementation Parameter Descriptor (IPD).
  • SQL statement의 파라미터에 관한 정보(SQL data type이나 크기, nullability)를 가짐.
  • Application Row Descriptor (ARD). result set의 칼럼에 bound된 어플리케이션 버퍼데 대한 정보(그 버퍼의 주소나 크기, C data type 등)를 가짐.
  • Implementation Row Descriptor (IRD). result set의 칼럼에 대한 정보(SQL data type이나 크기, nullability 등)를 가짐.

statement가 할당될 때 위 네개의 descriptors도 자동으로 할당되지만, 어플리케이션에서 SQLAllocHandle(..) 을 통해서 직접 할당할 수도 있으며 이를 explicityly allocated descriptors라 한다. 이런 descriptors는 connection에 할당이 되어 마찬가지로 그 connection에 할당된 하나 이상의 statements와 연관되어 APD 나 ARD의 역할을 맡는다.
ODBC에서 수행되는 대부분의 operation은 explicityly allocated descriptors 없이 수행 가능하지만, 때로 이런 descriptors가 몇몇 operation의 편리한 shortcut으로 사용할 수도 있다. (reference 참조)


reference

5월 26, 2016

wide character type (wchar_t) 란?

wide charater란 전통적인 8-bit character보다 더 큰 사이즈를 가지는 character datatype을 말함. datatype 사이즈가 커져 더 큰 character sets을 표현할 수 있다. UTF-16 little endian이 마이크로소프트의 wchar_t 표준이지만, wchar_t는 플랫폼 별, 컴파일러 별로 8 bit 에서 32 bit 까지 다양한 wide character implementation을 가지고 있어 wchar_t의 크기는 통일이 되지 않았다. 이런 이유로 프로그램이 multi platform에서 사용이 될 예정이라면 유니코드 저장 용도로 wchar_t을 사용해서는 안된다.

C/C++ 소스 코드는 보통 US-ASCII나 ISO-2022를 따르는 MBCS로 작성된다. 따라서 소스 코드에선 원칙적으로 wchar_t 문자열 사용이 불가능하다(ASCII와 호환되는 MBCS나 UTF-8만 가능). 이와 같이 소스 코드에서 wide character를 받지 않기 때문에, 소스 코드 상에서 L 문자를 문자열 앞에 붙여 wide character를 표현한다.

wchar_t * wchar = L"wide character string"

그러나 옛날 버전의 gcc 컴파일러에서는 이런 표현을 지원하지 않는 경우가 있기 때문에 확인이 필요하다.




reference

5월 19, 2016

SQL Server connection error: 26

증상

Microsoft SQL Server Management Studio 실행 후 Server(Database engine) Connection 시 접속 불가 현상.

MS SMS connection window


MS SMS error message



해결책

SQL Server 의 log on 대상을 built-in:local system으로 바꿔줌.

  1. SQL Server Configuration Manager 실행
  2. SQL Server Service items 설정 변경
    1. SQL Server(SQLEXPRESS) > properties
    2. log on tab 선택
    3. Log on as: built-in account > Local System 지정
    4. 필요한 경우 해당 서비스 리부트
  3. SQL SMS connection window에서 Server name을 .\SQLEXPRESS 로 변경 후 접속

reference

5월 18, 2016

windows 10에서 ODBC data source 설정 방법

C++에서 MSSQL DB을 연결하는 data access programming을 하기 위해선 ODBC data source를 설정해야 함.

  1. ODBC data source 찾기
  2. ODBC data source 설정

specifications

  • windows 10
  • ODBC driver 11
  • SQL Server 2014 Express

ODBC data source 찾기

data source 설정에 접근하는 방법은 크게 두가지가 있음.

  • 시작 메뉴에서
  • all aps -> Windows Administrative Tools -> ODBC data sources (32bit/64bit)

  • settings panel에서
  • Find a setting -> ODBC -> Set up ODBC data sources (32bit/64bit)

주의
32bit 또는 64bit 선택은 OS가 아니라 application을 따라감. 즉 자신이 build하고 run하는 application의 bit에 맞춰 선택
ODBC Administrator tool displays both the 32-bit and the 64-bit user DSNs in a 64-bit version of Windows |support.microsoft.com

ODBC data sources 설정

  1. "User DSN" tab 선택
  2. User DSN 외에도 여러 탭이 있는데, 각각 만드려는 ODBC Data source에 접근 범위를 설정하는 것. 시스템에 여러 user가 있고 모두 같은 data source를 쓰려면 System DSN으로 하는게 편함.

    • User DSN: 현재 user만 사용할 수 있으며, 현재 컴퓨터에 local인 data source를 생성.
    • System DSN: 시스템의 모든 user가 사용할 수 있으며, 현재 컴퓨터에 local인 data source를 생성.
    • File DSN: 동일한 드라이버를 설치한 모든 사용자들이 공유할 수 있는 파일 기반 data source를 생성. 현재 컴퓨터에 local 아니어도 가능.
    • Tracing: 이 탭은 ODBC 드라이버 관리자가 ODBC 함수 호출을 추적하는 방법을 지정. 캡쳐된 내용은 로그 파일에 저장됨.
    • Connection Pooling: 응용 프로그램이 연결 풀에서 연결을 다시 사용할 수 있도록 함. 연결 풀링을 사용할 때 연결 재시도 대기 시간 및 시간 제한(초)을 변경 가능.

  3. "Add" -> "ODBC Driver 11 for SQL Server" 선택
  4. Access나 Excel, SQL Server, ODBC Driver 등 data source를 연결할 드라이버를 지정 가능. ODBC를 이용해서 연결하므로 "ODBC Driver 11 for SQL Server" 또는 SQL Server 선택.

    • ODBC Driver 11 for SQL Server
    • SQL Server가 local인 경우 사용 가능.

    • SQL Server
    • SQL Server가 local이거나 remote 인 경우 사용 가능. 이후 설정 과정에서 "Client Configuration"을 named pipe(local), 혹은 TCP/IP(remote)로 설정을 바꿔줘야 함.

    • SQL Server Navtive Client 11.0
    • application이 C 언어로 작성되는 경우. (확인 필요)

  5. Name에 원하는 서버 이름, Server에 연결할 서버 작성
    • Name: 외부에 표시되는 서버 이름
    • Description: 외부에 표시되는 서버 설명
    • Server: 접속할 SQL server. SQL Server Management Studio에서 connection 시의 Server Name을 입력.

  6. Authentication 방법 설정
  7. Default Database 설정
  8. 기본은 master. SQL Server 내에서 미리 작성해놓은 Database 선택.

  9. 기타 설정

ODBC data sources 설정 - remote(TCP/IP)인 경우


reference

5월 12, 2016

MySQL 설치 관련 정보


  • MySQL server (필수)
  • 서버(DB)

  • MySQL for Visual Studio
  • MySQL 서버(DB) 관리 시 커맨드 라인에서 DDL이나 DML을 사용하지 않고도 Visual Studio에서 GUI로 편집할 수 있게 해주는 도구.

    주의
    MySQL for V.S. 와 MySQL connector 설치 시 반드시 MySQL for V.S. 를 먼저 설치한 후 MySQL connector를 나중에 설치해야 함.

  • MySQL connector/C++ (필수)
  • C++에서 MySQL 서버(DB)에 접근할 수있게 연결해주는 라이브러리. 크게 source file 형태, binary 형태로 제공. binary 형태의 제공은 미리 컴파일 되어있어 별도의 컴파일 과정 없이 사용 가능하나, 컴파일러 버전에 따라 호환이 되지 않을 수도 있음. 따라서 MySQL 측은 source file에서 자신이 사용하는 컴파일러를 통해 binary를 직접 생성할 것을 권장.

  • MySQL workbench C/E
  • MySQL 서버(DB)를 GUI로 편집할 수 있게 해주는 도구.

  • MySQL on Windows: MySQL INstaller
  • 위의 MySQL 서버와 tool들을 모두 포함한 all-in-one 버전.

    주의
    다만, 설치 과정에서 Visual studio와 MySQL의 bit 버전(86/64)을 동일하게 맞춰줘야하는데, 개별 설치하는 경우 각각 bit 버전을 맞출 수 있는 반면에서 자동 설치를 선택 시 비트 버전이 제각각이 될 수 있으니 주의.



reference

5월 10, 2016

commit 날짜 수정하는 법



  • author date: commit의 작성자가 commit을 작성한 날짜. commit message 안에 포함.
  • commit date: commit이 이루어진 날짜


git commit --amend --date="`date`" 사용 -> author date 가 현재 날짜로 바꿈.

GIT_COMMITTER_DATE="`date`" git commit --amend --date="`date`" -> commit date 와 author date 둘다 현재 날짜로 바꿈.




reference

5월 09, 2016

MSSQL ODBC vs OLEDB vs ADO


  • ODBC
  • OLEDB
  • ADO
  • ADO.NET
  • 기타

ODBC (Open DataBase Connector)

  1. 1992년 소개
  2. SQL data source만 처리 가능
  3. base는 C++ (MFC database classes가 ODBC를 베이스로 하고 있음), Java(JDBC)
  4. platform independent, 윈도우 리눅스 상관 없이 사용가능.

OLEDB (Object Linking and Embedding DataBase

  1. 1996년 소개
  2. ODBC가 SQL data만 처리 가능한데 반해, non-SQL data source도 처리 가능
  3. C++, Java
  4. COM을 이용하기 때문에 윈도우 종속적.
  5. SQL data source 접근할 때는 ODBC를 통해 접근한다는 설명도 있고 ODBC 없이 직접 접근할 수 있다는 설명도 있음. (확인 필요).
  6. OLE DB 는 deprecated 됨.
  7. Microsoft is Aligning with ODBC for Native Relational Data Access |blog.msdn.microsoft

ADO (ActiveX Data Object)

  1. 1996년 소개
  2. OLEDB의 high level interface. 다양한 언어에서 사용 가능.
  3. C++, C#, Java, VB, Script 언어(웹 어플리케이션)
  4. DB 접근 시 OLEDB를 거쳐가기 때문에 윈도우 종속적.
  5. 요즘 잘 안쓰인다는 설명이 있음. 확인 필요. //rev

ADO.NET

  1. 2002년 소개
  2. OLE DB 및 ODBC를 통해 노출되는 데이터 소스, SQL Server 및 XML과 같은 데이터 소스에 대한 일관성 있는 액세스를 제공
  3. C#, Java, VB, Script 언어(웹 어플리케이션)
  4. DB 접근 시 ADO를 거쳐가기 때문에 윈도우 종속적.
  5. 요즘 잘 안쓰인다는 설명이 있음. 확인 필요. //rev

기타

  1. DAO
  2. ODBC와 유사하나 ODBC가 다양한 데이터베이스에 접근할 수 있는데 반해 DAO는 local machine에 존재하는 데이터베이스에 빠르게 접근하기 위한 목적으로 개발됨.

  3. RDO
  4. 서버에 기반을 둔 데이터베이스를 위한 기술로 RDS가 뒤를 이은 후 현재는 잘 사용되지 않음.


그림1


그림2 (MSDN)


reference

5월 06, 2016

git cherry-pick 사용법

Given one or more existing commits, apply the change each one introduces, recording a new commit for each. This requires your working tree to be clean (no modifications from the HEAD commit).

다른 branch로부터 특정 commit을 가져와서 추가. 추가한 commit으로 새로운 commit이 생기며(hash값이 다름) 해당 commit에서 이루어진 변경 사항만 적용됨.

더 연구할 점

  1. reference에 따르면 cherry-pick하는 commit 만의 변경 사항을 가져올 것 같은데, 실제로는 conflict("both modified: 파일명") 가 발생하며 현재 branch와 cherry-picking branch의 공통 부모로부터 cherry-picking commit까지 모든 commit을 가져옴 (변경 사항을 누적시켜 모두 가져옴).
  2. 새로운 파일을 생성하고 만든 첫 commit을 cherry-pick하는 경우에는 merge conflict 없이 cherry-picking 됨
  3. 만약 새로운 파일을 생성하고 해당 파일을 수정하며 여러번 commit하고 이중 하나의 commit만 cherry-picking 하는 경우 conflict("deleted by us: 파일명") 발생하며 현재 branch와 cherry-picking branch의 공통 부모로부터 cherry-picking commit까지 모든 commit을 가져옴 (변경 사항을 누적시켜 모두 가져옴).

reference

5월 03, 2016

MSSQL Server 기초 개념

SQL Server 2014 Express advanced service

SQL db 본체. MSSQL Database와 DB 관리 도구 등의 구성 요소를 포함하고 있는 패키지. 요금제, 제공하는 서비스의 종류나 coverage에 따라 Enterprise, BI, Express(무료) 등 에디션이 구분됨. 또한 연도에 따라 2012, 2014, 2016 등 버전이 구분되며, 같은 버전 안에서 포함된 구성요소에 따라 SQL Server Express 도구, SQL Server Management studio, SQL Server Express with advanced service(모든 구성요소 포함) 등 패키지가 구분됨.


SQL ODBC driver

MySQL connector 와 같이 DB와 C++을 연결해 주는 라이브러리의 일종으로, 어플리케이션 내에서 작성된 쿼리를 DB로 보내고 결과 set을 받아오는 등 C++ 어플리케이션과 MSSQL 서버를 연결해 주는 역할. JDBC(java), .net(C#) 등 여러 종류의 드라이버가 존재.


reference