请教OLEDB实现多记录集的访问问题
class CSpQueryAccessor
{
public:
LONG m_RETURNVALUE;
LONG m_dwSvrID;
LONG m_ulFetch;
LONG m_coldwNID;
LONG m_coldwPID;
LONG m_coldwType;
LONG m_coldwStyle;
BEGIN_PARAM_MAP(CSpQueryAccessor)
SET_PARAM_TYPE(DBPARAMIO_OUTPUT)
COLUMN_ENTRY(1, m_RETURNVALUE)
SET_PARAM_TYPE(DBPARAMIO_INPUT)
COLUMN_ENTRY(2, m_dwSvrID)
SET_PARAM_TYPE(DBPARAMIO_INPUT | DBPARAMIO_OUTPUT)
COLUMN_ENTRY(3, m_ulFetch)
END_PARAM_MAP()
BEGIN_COLUMN_MAP(CSpQueryAccessor)
COLUMN_ENTRY(1, m_coldwNodeID)
COLUMN_ENTRY(2, m_coldwParentID)
COLUMN_ENTRY(3, m_coldwType)
COLUMN_ENTRY(4, m_coldwStyle)
END_COLUMN_MAP()
DEFINE_COMMAND(CSpQueryAccessor, _T("{ ? = CALL dbo.sp_Query;1 (?,?) }"))
void ClearRecord()
{
memset(this, 0, sizeof(*this));
}
};
typedef CCommand< CAccessor< CSpQueryAccessor >, CRowset, CMultipleResults > CSpQuery;
// 以上由ATL自动生成OLEDB代码,通过如下代码获取第一记录集中数据成功:
CSpQuery qnBys;
qnBys.m_dwSvrID = dwSvrID;
if ( SUCCEEDED ( hr = qnBys.Open( *pSession ) ) )
{
while ( S_OK == qnBys.MoveNext() )
{
node_array.append((void**)&pNodeInfo);
pNodeInfo->dwNodeID = qnBys.m_coldwNodeID;
pNodeInfo->dwParent = qnBys.m_coldwParentID;
pNodeInfo->dwType = qnBys.m_coldwType;
pNodeInfo->dwStyle = qnBys.m_coldwStyle;
*pulFetch = node_array.size();
if ( *pulFetch == 0 )
{
qnBys.Close();
m_SessionPool.FreeSession( uIndex );
*ppNodeInfo = NULL;
return S_OK;
}
// 这里处理第一记录集中数据
// ......
//代码获取第二记录集中有8个字段内容
LONG lRowAffected;
if( FAILED( hr = qnBys.GetNextResult( &lRowAffected, true ) ) )
{
qnBys.Close();
m_SessionPool.FreeSession( uIndex );
return hr;
}
// 请教在这里如何通过OLEDB访问多记录集,即如何访问返回的第二记录集中的数据。