CRecordset::FlushResultSet
複数の結果セットがある場合、定義済みクエリ (ストアド プロシージャ) 次の結果セットを取得します。
BOOL FlushResultSet( );
戻り値
取得するより多くの結果セットがある場合は、; それ以外の場合は 0。
解説
現在の結果セットにカーソルが完全に終了した場合にのみ FlushResultSet を呼び出す必要があります。FlushResultSetを呼び出して、次の結果セットを取得するときに、カーソルは、結果セットで無効であることに注意してください; FlushResultSetを呼び出した後 MoveNext のメンバー関数を呼び出す必要があります。
定義済みクエリが出力パラメーターまたは出力パラメーターを使用すると、FALSE 値 (0) を返すまで、これらのパラメーター値を取得する FlushResultSet を呼び出す必要があります。
FlushResultSet な SQLMoreResultsは、ODBC API 関数を呼び出します。SQLMoreResultsSQL_ERROR がを返す場合、または SQL_INVALID_HANDLEFlushResultSet は例外をスローします。SQLMoreResultsに関する詳細については、Windows SDKを参照してください。
ストアド プロシージャは FlushResultSetを呼び出す場合フィールドをバインドする必要があります。
例外
このメソッドは、型 **CDBException***の例外をスローできます。
使用例
次のコードは COutParamRecordset が CRecordset-入力パラメーターと出力パラメーター、および複数の結果セットを持つことを持つ定義済みのクエリに基づいて派生オブジェクトがあると仮定します。DoFieldExchange のオーバーライドの構造に注意してください。
// 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();
必要条件
ヘッダー: afxdb.h