CRecordset::FlushResultSet

(BOOL FlushResultSet) stała;
rzut (CDBException);

Wartość zwracany

Niezerowa, jeśli istnieją więcej zestawów wyników mają być pobrane; inny sposób 0.

Uwagi

Wywołanie tej funkcji Państwa pobrać następny zestaw wyników kwerendy wstępnie zdefiniowane (procedury przechowywane), jeśli istnieje wiele zestawów wyników. FlushResultSet powinna wywołać tylko wtedy, gdy jest całkowicie zakończone kursora bieżącego zestawu wyników. Należy zauważyć, że kiedy pobierasz następny wynik przez wywołanie FlushResultSet, kursor nie jest ważny na ten zestaw wyników; należy wywołać funkcję Państwa MoveNext po wywołaniu FlushResultSet.

Jeśli wstępnie zdefiniowane kwerendzie użyto parametru wyjściowego lub parametry wejściowe/wyjściowe, należy wywołać FlushResultSet , aż zwróci ona wartość FALSE (wartość 0), w celu uzyskania tych wartości parametrów.

FlushResultSet wywołuje funkcję ODBC API SQLMoreResults. Jeśli SQLMoreResults zwraca SQL_ERROR lub SQL_INVALID_HANDLE, FlushResultSet wygeneruje wyjątek. Aby uzyskać więcej informacji o SQLMoreResultszobacz Podręcznik programisty SDK ODBC.

Przykład

Poniższy kod zakłada się, że COutParamRecordset jest CRecordset-pozyskany obiekt na podstawie wstępnie zdefiniowanych kwerend z parametrem wejściowym i parametru wyjściowego i posiadające wiele zestawów wyników. Uwaga Struktura DoFieldExchange zastąpić.

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

Omówie&nie CRecordset |nbsp; Klasa członków | Wykres hierarchii

Zobacz też CFieldExchange::SetFieldType

Index