CRecordset::FlushResultSet

BOOL FlushResultSet () const;
tirar (CDBException);

Valor devuelto

Distinto de cero si hay más conjuntos de resultados para ser recuperados; caso contrario 0.

Observaciones

Llame a esta función miembro para recuperar el siguiente conjunto de resultados de una consulta predefinida (procedimiento almacenado), si hay varios conjuntos de resultados. Se debe llamar FlushResultSet sólo cuando esté completamente terminado con el cursor en el actual conjunto de resultados. Tenga en cuenta que cuando se abre el siguiente resultado llamando al FlushResultSet, el cursor no es válido en conjunto de resultados; debe llamar a la función de miembro MoveNext después de llamar a FlushResultSet.

Si una consulta predefinida utiliza un parámetro de salida o los parámetros de entrada y salida, debe llamar a FlushResultSet hasta que devuelva FALSE (valor 0), a fin de obtener estos valores de parámetro.

FlushResultSet llama a la función API de ODBC SQLMoreResults. Si SQLMoreResults devuelve SQL_ERROR o SQL_INVALID_HANDLE, FlushResultSet se producirá una excepción. Para obtener más información acerca de SQLMoreResults, consulte la referencia del programador del SDK de ODBC.

Ejemplo

El siguiente código supone que COutParamRecordset es un CRecordset-objeto derivado basado en una consulta predefinida con un parámetro de entrada y una salida y tener varios conjuntos de resultados. Nota la estructura de la DoFieldExchange reemplazar.

// 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 COutParamRecordset::DoFieldExchange( CFieldExchange* pFX )
{
   pFX->SetFieldType( CFieldExchange::outputParam );
   RFX_Long( pFX, "Param1", m_nOutParamInstructorCount );
         // The "Param1" name here is a dummy name 
         // that is never used

   pFX->SetFieldType( CFieldExchange::inputParam );
   RFX_Text( pFX, "Param2", m_strInParamName );
         // The "Param2" name here is a dummy name 
         // that is never used

}


// Now implement COurParamRecordset.

// Assume db is an already open CDatabase object
COutParamRecordset rs( &db );
rs.m_strInParamName = _T("Some_Input_Param_Value");

// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor 
//       type for multiple rowset returning stored 
//       procedures
rs.Open( CRecordset::forwardOnly, 
         "{? = CALL GetCourses( ? )}", 
         CRecordset::readOnly);

// Loop through all the data in the first result set
while ( !rs.IsEOF( ) )
{
   CString strFieldValue;
   for( int 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( int 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_nOutParamInstructorCount, has now been written.
// Note that m_nOutParamInstructorCount not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.

// TO DO: Use m_nOutParamInstructorCount

// Cleanup
rs.Close( );
db.Close( );

Visió&n General de CRecordset |nbsp; Miembros de clase | Diagrama de jerarquía

Vea tambié&nnbsp;CFieldExchange:: SetFieldType

Index