DbHelper::~DbHelper() { //todo: SQLFreeStmt를 이용하여 현재 SQLHSTMT 해제(unbind, 파라미터리셋, close 순서로) SQLRETURN ret = SQLFreeStmt( mCurrentSqlHstmt, SQL_UNBIND ); if ( SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret ) { PrintSqlStmtError(); return; } ret = SQLFreeStmt( mCurrentSqlHstmt, SQL_RESET_PARAMS ); if ( SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret ) { PrintSqlStmtError(); return; } ret = SQLFreeStmt( mCurrentSqlHstmt, SQL_CLOSE ); if ( SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret ) { PrintSqlStmtError(); return; } // WIP mSqlConnPool[LWorkerThreadId].mUsingNow = false; }
void DbHelper::BindResultColumnBool(bool* r) { SQLLEN len = 0; SQLRETURN ret = SQLBindCol(mCurrentSqlHstmt, mCurrentResultCol++, SQL_C_TINYINT, r, 1, &len); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); } }
void DbHelper::BindResultColumnInt(int* r) { SQLLEN len = 0; SQLRETURN ret = SQLBindCol(mCurrentSqlHstmt, mCurrentResultCol++, SQL_C_LONG, r, 4, &len); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); } }
void DbHelper::BindResultColumnText(wchar_t* text, size_t count) { SQLLEN len = 0; //todo: wchar_t*형 결과 컬럼 바인딩 SQLRETURN ret = SQLBindCol( mCurrentSqlHstmt, mCurrentResultCol++, SQL_C_WCHAR, text, count * 2, &len ); ///# 버퍼 크기를 넣어줘야지... count*2 if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); } }
void DbHelper::BindResultColumnFloat(float* r) { SQLLEN len = 0; //todo: float형 결과 컬럼 바인딩 SQLRETURN ret = SQLBindCol( mCurrentSqlHstmt, mCurrentResultCol++, SQL_C_FLOAT, r, sizeof( float ), &len ); ///# 왜 7?? 버퍼 크기를 넣어줘야 함 // 버퍼 크기 = sizeof( float ) = 4 by sm9 if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); } }
bool DbHelper::Execute(const wchar_t* sqlstmt) { //todo: mCurrentSqlHstmt핸들 사용하여 sqlstmt를 수행. SQLRETURN ret = SQLExecDirect( mCurrentSqlHstmt, (SQLWCHAR*)sqlstmt, SQL_NTS ); //= SQLExecDirect(...); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
void DbHelper::BindResultColumnFloat(float* r) { SQLLEN len = 0; //todo: float형 결과 컬럼 바인딩 SQLRETURN ret = SQLBindCol( mCurrentSqlHstmt, mCurrentResultCol++, SQL_C_FLOAT, r, 15, &len ); ///# 왜 15?? // WIP if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); } }
bool DbHelper::BindParamFloat(float* param) { SQLRETURN ret = SQLBindParameter(mCurrentSqlHstmt, mCurrentBindParam++, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0, param, 0, NULL); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::BindParamBool(bool* param) { //todo: bool형 파라미터 바인딩 SQLRETURN ret = SQLBindParameter( mCurrentSqlHstmt, mCurrentBindParam++, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, 1, 0, param, 0, NULL ); // WIP if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::BindParamInt(int* param) { //todo: int형 파라미터 바인딩 SQLRETURN ret = SQLBindParameter( mCurrentSqlHstmt, mCurrentBindParam++, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 4, 0, param, 0, NULL ); ///# 저기에서 4의 의미는?? 맞다고 생각? // WIP if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::BindParamText(const wchar_t* text) { //todo: 유니코드 문자열 바인딩 SQLRETURN ret = SQLBindParameter( mCurrentSqlHstmt, mCurrentBindParam++, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WVARCHAR, _tcslen( text ), 0, (SQLPOINTER)text, 0, NULL ); // WIP if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::BindParamBool(bool* param) { //todo: bool형 파라미터 바인딩 //http://msdn.microsoft.com/en-us/library/ms714556(v=vs.85).aspx SQLRETURN ret = SQLBindParameter( mCurrentSqlHstmt, mCurrentBindParam++, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, 1, 0, param, 0, NULL ); // = SQLBindParameter(...); // 3으로 넣을 수 있다. // Why? 실제 bool은 1바이트(0~255까지 가능)이므로 3자리까지 넣을 수 있음 by sm9 if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::BindParamInt(int* param) { //todo: int형 파라미터 바인딩 //http://wolfsi.egloos.com/10205557 //두번째 매개변수는 1부터 시작이므로 후위연산 //precision 참고 //http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.odbc.doc/sii-04-26325.htm SQLRETURN ret =SQLBindParameter(mCurrentSqlHstmt,mCurrentBindParam++,SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 10, 0, param, 0, NULL ); // = SQLBindParameter(...); ///# 굿! 유일하게 제대로 한 팀. if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { PrintSqlStmtError(); return false; } return true; }
bool DbHelper::FetchRow() { //todo: mCurrentSqlHstmt가 들고 있는 내용 fetch //http://wolfsi.egloos.com/2301972 //다음 행으로 커서를 진행시키고 바인드된 열을 가지고온다 SQLRETURN ret = SQLFetch( mCurrentSqlHstmt ); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { if (SQL_NO_DATA != ret) { PrintSqlStmtError(); } return false; } return true; }
bool DbHelper::FetchRow() { //todo: mCurrentSqlHstmt가 들고 있는 내용 fetch SQLRETURN ret = SQLFetch( mCurrentSqlHstmt ); ///# 이건 왜? SQLCloseCursor( mCurrentSqlHstmt ); // WIP if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { if (SQL_NO_DATA != ret) { PrintSqlStmtError(); } return false; } return true; }