SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
하면 나온다...
뭐 그냥 DBCA로 DB생성할때 문자셋트를 적절하게 고르자...
나도 그냥 첨부터 db다시 만들었다 ㅋ
오라클 - VS2008 연동
먼저 OCI/OCCI를 사용하려고 했다.
하지만 10g사용했더니 에러 발생...instant client, occi....10~11버전을 다 해봤지만 실패다
연결안되고, 처음에는 문자열길이가 255가 넘는다고 했었나..그런 에러가 발생했다
두번째는 ODBC쓸려고 했는데 복잡한것같고 매뉴얼도 잘검색이 안돼서 하다가 포기...
세번째로 oralib라는걸 찾아서 해봤다. 소스를 보니까 2002년도거였나...
하지만 잘 작동한다
먼저 몇마디 하자면 내 시스템에서는 이대로 따라하면 잘 되지만,
다른 시스템에서는 안 될 수도있다...
헤더파일, 라이브러리 파일 path라든지...debug, release옵션이라든지...
사실 옵션 설정할줄도 모르는데 어쩌다가 되길래 써둔것 뿐이다...
정확한 방법을 아는사람이 있으면 코멘트 해주시길...
--------------------------------------------------------------------------------
1. oracle instant client다운로드
2. oralib 다운로드 및 컴파일
(내가 사용한건 이미 컴파일된 oralib.lib파일로, release모드에서만 제대로 쓸수있는것 같다...)
lib파일을 프로젝트메인디렉토리 ../oralib/에 복사
3. VS셋팅에 include디렉토리, library디렉토리 추가 : instant client폴더 안에 있는걸 추가.
예) C:\oracle\product\10.2.0\db_1\OCI\include
C:\lib_include\instantclient_11_1\sdk\lib\msvc
4. 프로젝트 생성 시: static library 사용 체크
5. release 모드로 변경
6. 프로젝트 설정에 linker-input-additional dependency 에 oci.lib ociw32.lib 추가
일반 설정에 멀티바이트 코드로 변경
7. stdafx.h에 다음내용 추가
#include <vector>
#include <iostream>
#include <map>
#include <string>
# include <oci.h>
#pragma comment(lib, "../oralib/oralib.lib")
#include "../oralib/oralib.h"
using namespace oralib;
using namespace std;
8. dlg파일등 오라클 연결 테스트 함수에 다음 내용 추가
CString strTableName, strSql;
strTableName = "테이블 명";
int seqnumber;
strSql.Format("select seq from %s ",strTableName);
try
{
oralib::connection cn ("오라클sid", "계정", "암호");
resultset &rs = *cn.select (strSql);
if (!rs.eod ()){
do{
seqnumber = (int) rs ["SEQ"];
CString temp;
temp.Format("%d",seqnumber);
AfxMessageBox(temp);
}
while (++rs);
rs.release ();
}
}
catch (oralib::error &e)
{
AfxMessageBox(e.details().c_str());
}
catch (...)
{
AfxMessageBox("unrecognized error occured!\n");
}