术语 | CRecordset::FlushResultSet |
释义 | CRecordset::FlushResultSet BOOL FlushResultSet() const; throw( CDBException ); 返回值: 如果获取了多个结果集,则返回非零值;否则返回0。 说明: 此成员函数用来获取一个预定义的查询(被保存的过程)的下一个结果集,如果有多个结果集的话。只有在你完全完成了对在当前结果集上的游标的处理时,你才应该调用FlushResultSet。值得注意的是,当你通过调用FlushResultSet获取下一个结果集时,则在那一个结果集上的游标就无效了;你应当在调用FlushResultSet之后调用MoveNext成员函数。 如果一个预定义的查询使用了输出参数或者是输入/输出参数,则为了得到这些参数的值,你必须一直调用FlushResultSet直到它返回FALSE(值0)。 FlushResultSet调用了ODBC API函数SQLMoreResults。如果SQLMoreResults返回SQL_ERROR或SQL_INVALID_HANDLE,则FlushResultSet将抛出一个异常。要获取有关SQLMoreResults的更多信息,请参见“ODBC SDK程序员参考”。 示例: 下面的例子假定COutParamRecordset是一个基于预定义查询的Crecordset的派生对象,该查询具有一个输入参数和一个输出参数,并且有多个结果集。注意DoFieldExchange重载的结构。 // DoFieldExchange重载 // 只有在处理参数装订时才有必要。 // 不要使用有边界字段的CRecordset派生类,除非所有的结果集具有相同的概要或者是有条件的装订代码。 void COutParamRecordset::DoFieldExchange( CFieldExchange* pFX ) { pFX->SetFieldType( CFieldExchange::outputParam ); RFX_Long( pFX, "Param1", m_nOutParamInstructorCount ); // 在此“Param1”名字是一个从未使用过的假名。 pFX->SetFieldType( CFieldExchange::inputParam ); RFX_Text( pFX, "Param2", m_strInParamName ); // 在此“Param2”名字是一个从未使用过的假名。 } // 现在实现COurParamRecordset。 // 假定db是一个已经打开的数据库对象。 COutParamRecordset rs( &db ); rs.m_strInParamName = _T("Some_Input_Param_Value"); // 获取第一个结果集 // 注意:对于返回多行集合的存储过程来说,SQL Server需要只能前进类型的游标。 // 过程 rs.Open( CRecordset::forwardOnly, "{? = CALL GetCourses( ? )}", CRecordset::readOnly); // 在第一个结果集中循环通过所有的数据 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(); } // 获取其它的结果集... while( rs.FlushResultSet( ) ) { // 由于游标无效,必须定义MoveNext rs.MoveNext( ); while ( !rs.IsEOF() ) { CString strFieldValue; for( int nIndex = 0; nIndex < rs.GetODBCFieldCount( ); nIndex++ ) { rs.GetFieldValue( nIndex, strFieldValue ); // TO DO: 使用的字段值字符串。 } rs.MoveNext( ); } } // 所有的结果集都满了。不能使用该游标了,但是已经写入了输出参数m_nOutParamInstructorCount。 // 注意,要直到CRecordset::FlushResultSet返回FALSE,这表明不会再返回更多的结果集,这时m_nOutParamInstructorCount才无效。 // TO DO: 使用m_nOutParamInstructorCount // 清除 rs.Close( ); db.Close( ); 请参阅:CFieldExchange::SetFieldType |
随便看 |
|
MFC类库中文详解手册包含4274条MFC类库参考词条,基本涵盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容,是计算机编程的有利工具。