Partager via


CRecordset::FlushResultSet

Extrait l'ensemble des résultats d'une requête prédéfinie (procédure stockée), s'il existe plusieurs jeux de résultats.

BOOL FlushResultSet( );

Valeur de retour

Une valeur différente de zéro s'il y a plus de jeux de résultats à récupérer ; sinon 0.

Notes

Vous devez appeler FlushResultSet uniquement lorsque vous êtes complètement terminé avec le curseur dans le jeu de résultats actuel. Notez que lorsque vous récupérez le prochain jeu de résultats en appelant FlushResultSet, votre curseur est pas valide dans ce jeu de résultats ; vous devez appeler la fonction membre de MoveNext après avoir appelé FlushResultSet.

Si une requête prédéfinie utilise un paramètre de sortie ou des paramètres d'entrée/sortie, vous devez appeler FlushResultSet jusqu'à ce qu'il retourne FALSE (la valeur 0), afin d'obtenir ces valeurs de paramètre.

FlushResultSet appelle la fonction API ODBC SQLMoreResults. Si SQLMoreResults retourne SQL_ERROR ou SQL_INVALID_HANDLE, puis FlushResultSet lève une exception. Pour plus d'informations sur SQLMoreResults, consultez Kit de développement logiciel Windows.

Votre procédure stockée doit avoir des champs liés si vous souhaitez appeler FlushResultSet.

Exceptions

Cette méthode peut lever des exceptions de type CDBException*.

Exemple

Le code suivant suppose qu' COutParamRecordset est CRecordsetobjet dérivé sur une requête prédéfinie avec un paramètre d'entrée et un paramètre de sortie, et avoir plusieurs jeux de résultats. Notez la structure de la substitution de 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();

Configuration requise

en-tête : afxdb.h

Voir aussi

Référence

CRecordset, classe

Graphique de la hiérarchie

CFieldExchange::SetFieldType