Bool FlushResultSet () const;
(CDBException) atmak;
Dönüş değeri
Sıfır alınacak daha fazla sonuç kümeleri varsa; Aksi halde 0.
Açıklamalar
Birden çok sonuç kümeleri varsa önceden tanımlanmış bir sorgu (saklı yordam), sonraki sonuç kümesini almak için bu üye işlevini çağırın. Sadece tamamen geçerli sonuç kümesi imleç üzerindeyken bittiğinde FlushResultSet çağırmalısınız. FlushResultSetarayarak sonraki sonuç aldığınızda, imlecinizi sonuç kümesi bu geçerli değildir; FlushResultSet çağrıldıktan sonra MoveNext üye işlevini çağırmalıdır.
Önceden tanımlanmış bir sorgu çıktı parametresi veya giriş/çıkış parametreleri kullanıyorsa, yanlış (0 değeri), bu parametre değerleri elde edebilmek için döner kadar FlushResultSet çağırmalısınız.
FlushResultSet SQLMoreResultsodbc API işlevini çağırır. SQLMoreResults SQL_INVALID_HANDLEveya sql_error döndürürse, FlushResultSet bir özel durum oluşturur. SQLMoreResultshakkında daha fazla bilgi için bkz: odbc sdk Programcı Başvurusu.
Örnek
Aşağıdaki kod varsayar COutParamRecordset bir CRecordsetolan-bir girdi parametresini ve bir çıkış parametresi ile tanımlanmış bir sorguyu temel ve birden çok sonuç kümeleri olan türetilen nesne. Not DoFieldExchange yapısı geçersiz.
// 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( );
CRecordset ge&nel bakış |nbsp; Sınıf üyeleri | Hiyerarşi çizelgesi
Ayrıca bkz: CFieldExchange::SetFieldType