다음을 통해 공유


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

참고 항목

CRecordset Class
계층 구조 차트
CFieldExchange::SetFieldType