1. 연결
    1. SQLAllocHandle(SQL_HANDLE_DBC, COdbcEnv::GetHandle(), &hdbc)
    2. // 네트워크 불안정 시 select() 또는 poll() 에서 발생할 수 있는 blocking을 방지하기 위한 timeout 값 설정
      SQLSetConnectAttr(hdbc, SQL_ATTR_CONNECTION_TIMEOUT, reinterpret_cast<SQLPOINTER>(ODBC_TIMEOUT), SQL_IS_UINTEGER)
    3. // ODBC연결
      SQLConnect(hdbc,     reinterpret_cast<SQLCHAR*>(szDSN), SQL_NTS,
                                      reinterpret_cast<SQLCHAR*>(szUsr), SQL_NTS,
                                      reinterpret_cast<SQLCHAR*>(szPwd), SQL_NTS)
    4. // STMT 할당
      SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt)
    5. // 퀘리 타임아웃 설정.
      DWORD dwQueryTimeOut = ODBC_TIMEOUT; // ODBC_TIMEOUT = 20
      SQLSetStmtAttr(hstmt, SQL_ATTR_QUERY_TIMEOUT, reinterpret_cast<SQLPOINTER>(dwQueryTimeOut), SQL_IS_UINTEGER)

  2. Bind 바인드
    1. SQLBindCol(hstmt, col, type, buf, bufLen, &Len))

  3. 트랜젠션 시작
    1. // 오토 커밋 비활성화
      SQLSetConnectAttr( hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0 )

  4. 쿼리 설정
    1. SQLExecDirect(hstmt, szQuery, SQL_NTS)

  5. Commit or Rollback
    1. Commit
      1. SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT)
    1. Rollback
      1. SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_ROLLBACK)

  6. 리셋
    1. // 오토커밋 설정
      SQLSetConnectAttr( hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0 )

  7. 닫기
    1. SQLFreeHandle(SQL_HANDLE_DBC, hstmt)
    2. SQLDisconnect(hdbc)
    3. SQLFreeHandle(SQL_HANDLE_DBC, hdbc)

+ Recent posts