CRecordset::FlushResultSet
Ruft das folgende Resultset einer vordefinierten Abfrage (gespeicherte Prozedur) ab, wenn mehrere Resultsets vorhanden sind.
BOOL FlushResultSet( );
Rückgabewert
Ungleich 0 (null), wenn mehr abgerufen werden müssen; Resultsets 0 andernfalls.
Hinweise
Sie sollten FlushResultSet nur aufrufen, wenn Sie vollständig mit dem Cursor auf das aktuelle Resultset beendet werden.Beachten Sie, dass, wenn Sie das folgende Resultset abrufen, indem Sie FlushResultSet aufrufen, der Cursor auf diesem Resultset ungültig ist; Sie sollten die MoveNext-Memberfunktion aufrufen, nachdem Sie FlushResultSet aufgerufen haben.
Wenn eine vordefinierte Abfrage einen Ausgabeparameter oder Eingabe/Ausgabe-Parameter verwendet, müssen Sie FlushResultSet aufrufen, bis es FALSE (Wert 0) zurückgibt, erhält diese Parameterwerte.
FlushResultSet ruft die ODBC-API-Funktion SQLMoreResults auf.Wenn SQLMoreResultsSQL_ERROR oder SQL_INVALID_HANDLE zurückgibt, löst FlushResultSet eine Ausnahme aus.Weitere Informationen zu SQLMoreResults, finden Sie unter Windows SDK.
Die gespeicherte Prozedur muss gebundene Felder verfügen, wenn Sie FlushResultSet aufrufen möchten.
Ausnahmen
Diese Methode kann Ausnahmen des Typs CDBException* auslösen.
Beispiel
Im folgenden Code wird davon ausgegangen, dass COutParamRecordsetCRecordset von abgeleitetes Objekt auf einer vordefinierten Abfrage mit einem Eingabeparameter und einem Ausgabeparameter und Taskebene mehrerer Resultsets ist.Beachten Sie die Struktur der DoFieldExchange Überschreibung.
// 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();
Anforderungen
Header: afxdb.h