Пример #1
0
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;
}
Пример #7
0
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;
}
Пример #9
0
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;
}
Пример #10
0
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;
}
Пример #11
0
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;
}
Пример #15
0
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;
}