- 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
- ODBC 프로그래밍 Commit Rollback 지원 2009.10.06
- ODBC file DSN 접속하기 2009.03.27 1
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;
}