Abrufen von Daten
Nachdem Sie die Datenquellen-, Sitzungs- und Rowsetobjekte geöffnet haben, können Sie Daten abrufen. Je nachdem, welche Art von Accessor Sie verwenden, müssen Sie möglicherweise Spalten binden.
So rufen Sie Daten ab
Öffnen Sie das Rowset mit dem entsprechenden Befehl "Öffnen ".
Wenn Sie die Ausgabespalten verwenden
CManualAccessor
, binden Sie die Ausgabespalten, sofern dies noch nicht geschehen ist. Das folgende Beispiel stammt aus dem DBViewer-Beispiel . So binden Sie die Spalten, rufen SieGetColumnInfo
auf, und erstellen Sie dann einen Accessor mit den Bindungen, wie im folgenden Beispiel gezeigt:// 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();
Schreiben Sie eine
while
Schleife, um die Daten abzurufen. Rufen Sie in der Schleife aufMoveNext
, um den Cursor zu durchlaufen und den Rückgabewert anhand S_OK zu testen, wie im folgenden Beispiel gezeigt:while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
Innerhalb der
while
Schleife können Sie die Daten gemäß Ihrem Accessortyp abrufen.Wenn Sie die CAccessor-Klasse verwenden, sollten Sie über einen Benutzerdatensatz verfügen, der Datenmember enthält. Sie können auf Ihre Daten mithilfe dieser Datenmmber zugreifen, wie im folgenden Beispiel gezeigt:
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); }
Wenn Sie die Klasse oder
CDynamicParameterAccessor
dieCDynamicAccessor
Klasse verwenden, können Sie Daten abrufen, indem Sie die ZugriffsfunktionenGetValue
verwenden undGetColumn
, wie im folgenden Beispiel gezeigt. Wenn Sie den Datentyp bestimmen möchten, den Sie verwenden, verwendenGetType
Sie .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); } }
Wenn Sie verwenden
CManualAccessor
, müssen Sie Ihre eigenen Datenmmber angeben, sie selbst binden und direkt darauf zugreifen, wie im folgenden Beispiel gezeigt:while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }