Recupero di dati
Dopo aver aperto gli oggetti origine dati, sessione e set di righe, è possibile recuperare i dati. A seconda del tipo di funzione di accesso in uso, potrebbe essere necessario associare colonne.
Per recuperare i dati
Aprire il set di righe usando il comando Open appropriato.
Se si usa
CManualAccessor
, associare le colonne di output se non è già stato fatto. L'esempio seguente è tratto dall'esempio DBViewer . Per associare le colonne, chiamareGetColumnInfo
e quindi creare una funzione di accesso con le associazioni, come illustrato nell'esempio seguente:// From the DBViewer Sample CDBTreeView::OnQueryEdit // Get the column information ULONG ulColumns = 0; DBCOLUMNINFO* pColumnInfo = NULL; LPOLESTR pStrings = NULL; if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK) ThrowMyOLEDBException(rs.m_pRowset, IID_IColumnsInfo); struct MYBIND* pBind = new MYBIND[ulColumns]; rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns); for (ULONG l=0; l<ulColumns; l++) rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus); rs.Bind();
Scrivere un
while
ciclo per recuperare i dati. Nel ciclo chiamareMoveNext
per far avanzare il cursore e testare il valore restituito su S_OK, come illustrato nell'esempio seguente:while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
All'interno del
while
ciclo è possibile recuperare i dati in base al tipo di funzione di accesso.Se si usa la classe CAccessor , è necessario disporre di un record utente che contiene membri dati. È possibile accedere ai dati usando tali membri dati, come illustrato nell'esempio seguente:
while (rs.MoveNext() == S_OK) { // Use the data members directly. In this case, m_nFooID // is declared in a user record that derives from // CAccessor wsprintf_s("%d", rs.m_nFooID); }
Se si usa la
CDynamicAccessor
classe oCDynamicParameterAccessor
, è possibile recuperare i dati usando le funzioniGetValue
di accesso eGetColumn
, come illustrato nell'esempio seguente. Se si vuole determinare il tipo di dati in uso, usareGetType
.while (rs.MoveNext() == S_OK) { // Use the dynamic accessor functions to retrieve your data. ULONG ulColumns = rs.GetColumnCount(); for (ULONG i=0; i<ulColumns; i++) { rs.GetValue(i); } }
Se si usa
CManualAccessor
, è necessario specificare i propri membri dati, associarli manualmente e accedervi direttamente, come illustrato nell'esempio seguente:while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }