CRecordset::FlushResultSet
게시: 2016년 4월
여러 결과 집합이 있는 경우 다음 결과 집합을 미리 정의 된 쿼리 (저장된 프로시저)를 검색 합니다.
구문
BOOL FlushResultSet( );
반환 값
더 많은 결과 집합을 검색할 경우에 0이 아닌. 그렇지 않으면 0입니다.
설명
호출 해야 FlushResultSet 만 완전히 현재 결과 집합에서 커서를 마치면. 다음 결과 집합을 호출 하 여 검색할 경우 FlushResultSet, 커서는 결과 집합에; 맞지 않습니다. 호출 해야는 MoveNext 멤버 함수 호출 FlushResultSet.
미리 정의 된 쿼리는 출력 매개 변수나 입/출력 매개 변수를 사용 하는 경우 호출 해야 FlushResultSet 이 반환 될 때까지 FALSE (이러한 매개 변수 값을 얻기 위해 값 0).
FlushResultSetODBC API 함수를 호출 합니다. SQLMoreResults. 경우 SQLMoreResults 반환 SQL_ERROR 또는 SQL_INVALID_HANDLE, 다음 FlushResultSet 예외가 throw 됩니다. 에 대 한 자세한 내용은 SQLMoreResults을 참조 하십시오의 Windows SDK.
저장된 프로시저를 호출 하는 경우 필드를 연결 해야 할 FlushResultSet.
예외
Exception
Condition
이 메서드가 형식의 예외를 throw 할 수 있습니다 CDBException*.
예제
다음 코드는 가정 COutParamRecordset 되는 CRecordset-파생된 개체는 미리 정의 된 쿼리 입력된 매개 변수 및 출력 매개 변수를 기반으로 하 고 여러 결과 집합입니다. 참고의 구조는 DoFieldExchange 무시 합니다.
// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Long(pFX, _T("Param1"), m_nCountParam);
// The "Param1" name here is a dummy name
// that is never used
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param2"), m_strNameParam);
// The "Param2" name here is a dummy name
// that is never used
}
// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");
// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor
// type for multiple rowset returning stored
// procedures
rs.Open(CRecordset::forwardOnly,
_T("{? = CALL GetCourses( ? )}"),
CRecordset::readOnly);
// Loop through all the data in the first result set
while (!rs.IsEOF())
{
CString strFieldValue;
for(short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
// Retrieve other result sets...
while(rs.FlushResultSet())
{
// must call MoveNext because cursor is invalid
rs.MoveNext();
while (!rs.IsEOF())
{
CString strFieldValue;
for(short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
}
// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.
// TO DO: Use m_nCountParam
// Cleanup
rs.Close();
요구 사항
헤더: afxdb.h