LOGIN • JOININ

SQL-AllocQuery

[Tutorials/[Server] 4. Query classes/Tutorial_Query03_SQL-AllocQuery]



AllocQuery() 혹은 PostAllocQuery()는 Query 객체만 얻어온 다음 OpenQuery()함수로 직접 쿼리를 요청하는 방법입니다.

이 방법은 한번 Query 객체를 얻은 다음 OpenQuery()함수를 사용해 Query를 요청하고 Query의 처리가 끝나고 CloseQuery()함수를 사용해 닫으면 다시 OpenQuery()를 요청할 수 있습니다.

따라서 한 번의 AllocQuery()로 여러 번의 Query를 순차적으로 수행이 가능합니다.

AllocQuer()함수의 비동기식 처리 함수는 PostAllocQuery()함수입니다.



1... AllocQuery() 혹은 PostAllocQuery() 함수의 사용


// 1) Query를 할당받는다. (순전히 Session만 할당받는다.)
auto	pQuery	 = g_pQuerier->AllocQuery();

// Check) pQuery nullptr이면 끝!
ERROR_THROW_IF(pQuery.empty(), CGException::CThrow_Failure(), );

// 2) Query를 요청한다.(Query를 요청하는 것부터 처리해야 한다.)
HRESULT hResult	 = pQuery->OpenQuery("SELECT * FROM Account");

// Check) Query에 실패했으면 끝냄!
ERROR_THROW_IF(hResult!=S_OK, CGException::CThrow_Failure(), );

// 3) for문을 사용해 Query결과를 차례로 읽어들인다.
for(auto& iter:*pQuery)
{
	// 4) Index로 Column값을 읽어들인다.(Column은 1부터 시작한다는 점에 주의)
	auto	id			 = iter.GetValue<int64_t>(1);
	auto	isDeleted	 = iter.GetValue<VARIANT_BOOL>(2);
	auto	strName		 = iter.GetValue<WCHAR*>(3);
	auto	strPassword	 = iter.GetValue<WCHAR*>(4);

	// 4A) Field Name으로 Colume값을 읽어들인다.
	int		iIndex		 = iter.GetOrdinal("Group");
	auto	strGroup	 = iter.GetValue<WCHAR*>(iIndex);

	// 4B) Field Name으로 Colume값을 문자열로 얻는다.
	auto	strDebut	 = iter.GetValue<WCHAR*>("dateDebut");

	// 5) 출력
	. . .
}
// 6) 쿼리를 닫는다.
pQuery->CloseQuery();

1) AllocQuery()함수를 통해 Query 객체를 할당받습니다.

AllocQuer()는 RequestQuery()와 다르게 Query를 수행하지 않기 때문에 Query문을 넣지 않아도 됩니다.

2) Query 객체를 할당 받은 다음 OpenQuery()함수를 사용해 Query를 요청합니다.

3) Query가 성공했다면 for문을 사용해 Query 결과를 차례로 읽어들입니다.

4) 일반적인 처리는 RequestQuery()와 동일합니다.

5) pQuery를 다 처리했으면 CloseQuery()합니다.


CloseQuery()이후에 다시 OpenQuery()를 수행할 수 있습니다.