Sdílet prostřednictvím


CRecordset::FlushResultSet

Vyhledá další sadu výsledků dotazu předdefinované (uložené procedury), pokud existuje více sad výsledků.

BOOL FlushResultSet( );

Vrácená hodnota

Nenulová hodnota, pokud existují další sady výsledků mají být načtena jinak 0.

Poznámky

Volat FlushResultSet pouze skončíte zcela umístěte kurzor na aktuální sadu výsledků.Poznámka: Pokud načtete další výsledek nastavit voláním FlushResultSet , kurzor není platný pro tuto sadu výsledků; volat MoveNext členské funkce volání po FlushResultSet .

Pokud předdefinovaný dotaz používá výstupní parametr nebo vstupní a výstupní parametry, musíte zavolat FlushResultSet dokud vrátí FALSE (hodnota 0), pro získání hodnoty těchto parametrů.

FlushResultSetvolání funkce rozhraní API ODBC SQLMoreResults .Pokud SQLMoreResults vrátí SQL_ERROR nebo SQL_INVALID_HANDLE , pak FlushResultSet vyvolají výjimku.Další informace o SQLMoreResults , najdete .

Potřebuje vázané pole, pokud chcete volat uložené procedury FlushResultSet .

Výjimky

Tuto metodu lze vyvolávají výjimky typu CDBException* .

Příklad

Následující kód předpokládá, že COutParamRecordset je CRecordset -objekt odvozené na základě předdefinovaných vstupní parametr a výstupní parametr dotazu a s více sad výsledků.Poznámka: struktura DoFieldExchange přepsat.

// 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();

Požadavky

Záhlaví: afxdb.h

Viz také

Referenční dokumentace

Třída CRecordset

Graf hierarchie

CFieldExchange::SetFieldType