- Connect .
- SQLAllocHandle( SQL_HANDLE_DBC, ... ) 함수 호출후 아래 함수 호출
- SQLSetConnectAttr( m_hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0 );
- Commit
- SQL실행후 SQLCloseCursor 호출전에 아래 함수 호출.
- 아래 Rollback과 같이 호출하면 안됨.
- SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT);
- Rollback
- SQL실행후 SQLCloseCursor 호출전에 아래 함수 호출.
- 위 Commit과 같이 호출하면 안됨.
- SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_ROLLBACK);
프로그래밍
- ODBC 프로그래밍 Commit Rollback 지원 2009.10.06
- ODBC file DSN 접속하기 2009.03.27 1
- 내가 생각하는 C++ 프로그램을 배우는 코스 2008.04.17
ODBC 프로그래밍 Commit Rollback 지원
2009. 10. 6. 15:14
ODBC file DSN 접속하기
2009. 3. 27. 10:56
=========fileDSN.dsn
[ODBC]
DRIVER=SQL Server
UID=testid
DATABASE=testDb
PWD=passwd
APP=Microsoft Data Access Components
SERVER=testserver
=========
// 소스
#pragma comment(lib, "odbc32.lib")
#include <iostream>
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
void DsnQuery()
{
//////////////////////////////////////////////////////////////////////////////////////
// start
SQLHENV hEnv;
// 환경 핸들을 할당하고 버전 속성을 설정한다.
if( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv ) != SQL_SUCCESS )
return;
if( SQLSetEnvAttr( hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER ) != SQL_SUCCESS )
return;
// 연결 핸들을 할당하고 연결한다.
SQLHDBC hDbc;
if( SQLAllocHandle( SQL_HANDLE_DBC, hEnv, &hDbc ) != SQL_SUCCESS )
return;
SQLCHAR connectInfo[256] = { 0, };
wsprintf( (char *)connectInfo, "FILEDSN=.\\fileDSN.dsn" );
SQLCHAR outInfo[256] = { 0, };
SQLSMALLINT sqlRet = 0;
SQLRETURN ret = SQLDriverConnect( hDbc, NULL, connectInfo, sizeof( connectInfo ), outInfo, sizeof( outInfo ),
&sqlRet, SQL_DRIVER_NOPROMPT );
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO ) {
cout << "ERROR : INI Table을 가져올수 없습니다.\n";
return ;
}
//////////////////////////////////////////////////////////////////////////////////////
// 명령 핸들 할당. 및 바인딩.
// 명령 핸들을 할당한다.
SQLHSTMT hStmt;
SQLAllocHandle( SQL_HANDLE_STMT, hDbc, & hStmt );
// 결과를 돌려 받기 위해 바인딩한다.
SQLCHAR iniTablename[64];
SQLLEN lIniTablename;
SQLBindCol( hStmt, 1, SQL_C_CHAR, iniTablename, sizeof(iniTablename), &lIniTablename );
// SQL문을 실행한다.
SQLExecDirect( hStmt, (SQLCHAR *)"select name from test_table where name like 'test%' order by name", SQL_NTS );
while( SQLFetch( hStmt ) != SQL_NO_DATA ) {
cout << reinterpret_cast<char *>( iniTablename ) << endl;
}
SQLCloseCursor( hStmt );
SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
//////////////////////////////////////////////////////////////////////////////////////
// clean up
SQLDisconnect( hDbc );
SQLFreeHandle( SQL_HANDLE_DBC, hDbc );
SQLFreeHandle( SQL_HANDLE_ENV, hEnv );
}
int _tmain(int argc, _TCHAR* argv[])
{
DsnQuery();
return 0;
}
[ODBC]
DRIVER=SQL Server
UID=testid
DATABASE=testDb
PWD=passwd
APP=Microsoft Data Access Components
SERVER=testserver
=========
// 소스
#pragma comment(lib, "odbc32.lib")
#include <iostream>
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
void DsnQuery()
{
//////////////////////////////////////////////////////////////////////////////////////
// start
SQLHENV hEnv;
// 환경 핸들을 할당하고 버전 속성을 설정한다.
if( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv ) != SQL_SUCCESS )
return;
if( SQLSetEnvAttr( hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER ) != SQL_SUCCESS )
return;
// 연결 핸들을 할당하고 연결한다.
SQLHDBC hDbc;
if( SQLAllocHandle( SQL_HANDLE_DBC, hEnv, &hDbc ) != SQL_SUCCESS )
return;
SQLCHAR connectInfo[256] = { 0, };
wsprintf( (char *)connectInfo, "FILEDSN=.\\fileDSN.dsn" );
SQLCHAR outInfo[256] = { 0, };
SQLSMALLINT sqlRet = 0;
SQLRETURN ret = SQLDriverConnect( hDbc, NULL, connectInfo, sizeof( connectInfo ), outInfo, sizeof( outInfo ),
&sqlRet, SQL_DRIVER_NOPROMPT );
if( ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO ) {
cout << "ERROR : INI Table을 가져올수 없습니다.\n";
return ;
}
//////////////////////////////////////////////////////////////////////////////////////
// 명령 핸들 할당. 및 바인딩.
// 명령 핸들을 할당한다.
SQLHSTMT hStmt;
SQLAllocHandle( SQL_HANDLE_STMT, hDbc, & hStmt );
// 결과를 돌려 받기 위해 바인딩한다.
SQLCHAR iniTablename[64];
SQLLEN lIniTablename;
SQLBindCol( hStmt, 1, SQL_C_CHAR, iniTablename, sizeof(iniTablename), &lIniTablename );
// SQL문을 실행한다.
SQLExecDirect( hStmt, (SQLCHAR *)"select name from test_table where name like 'test%' order by name", SQL_NTS );
while( SQLFetch( hStmt ) != SQL_NO_DATA ) {
cout << reinterpret_cast<char *>( iniTablename ) << endl;
}
SQLCloseCursor( hStmt );
SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
//////////////////////////////////////////////////////////////////////////////////////
// clean up
SQLDisconnect( hDbc );
SQLFreeHandle( SQL_HANDLE_DBC, hDbc );
SQLFreeHandle( SQL_HANDLE_ENV, hEnv );
}
int _tmain(int argc, _TCHAR* argv[])
{
DsnQuery();
return 0;
}
내가 생각하는 C++ 프로그램을 배우는 코스
2008. 4. 17. 17:47
- C++ 기초 문법책을 본다.
- 열혈강의 C++ 프로그래밍 , 프리렉 , 윤성우
- Accelerated C++ : 예제로 배우는 진짜배기 C++ 프로그래밍
- 디자인 패턴책을 본다.
- Head First Design Patterns 를 보고 이를 한번 적용한 케이스를 찾아본다.
- 직접 사용도 해본다.
- C++ 응용책
- Effective STL, Effective C++
- The C++ Programing Language
- 기타 도움을 줄만한 책
- 운영체제 기초책
위책은 순수하게 C++를 배우는 책들이며..
여기에 열혈강의 C++ 프로그래밍 책을 다음부터는
자기가 배워야 할 분야의 책을 동시에 보기를 봐야 할거라고 생각합니다.
한번에 이해할려고 하지말고 여러번 보고 이해하는것이 방법인것 같습니다.
배우는 기간은 3년이상으로 생각합니다.