Freigeben über


Recordset: Arbeiten mit großen Datenelementen (ODBC)

Dieses Thema gilt sowohl für die MFC ODBC-Klassen als auch für die MFC DAO-Klassen.

Hinweis

Wenn Sie die MFC DAO-Klassen verwenden, verwalten Sie Ihre großen Datenelemente mit Der Klasse CByteArray und nicht mit der Klasse "CLongBinary". Wenn Sie die MFC ODBC-Klassen mit massenweisem Abrufen von Zeilen verwenden, verwenden CLongBinary Sie statt CByteArray. Weitere Informationen zum Abrufen von Massenzeilen finden Sie unter Recordset: Abrufen von Datensätzen in Massen (ODBC).For more information about bulk row fetching, see Recordset: Fetching Records in Bulk (ODBC).For more information about bulk row fetching, see Recordset: Fetching Records in Bulk (ODBC).For more information

Angenommen, Ihre Datenbank kann große Datenelemente speichern, z. B. Bitmaps (Mitarbeiterfotos, Karten, Bilder von Produkten, OLE-Objekten usw.). Diese Art von Daten wird häufig als Binary Large Object (oder BLOB) bezeichnet, da:

  • Jeder Feldwert ist groß.

  • Im Gegensatz zu Zahlen und anderen einfachen Datentypen hat sie keine vorhersehbare Größe.

  • Die Daten sind aus der Perspektive Ihres Programms formlos.

In diesem Thema wird erläutert, welche Unterstützung die Datenbankklassen für das Arbeiten mit solchen Objekten bieten.

Verwalten großer Objekte

Recordsets haben zwei Möglichkeiten, die besondere Schwierigkeit beim Verwalten von binären großen Objekten zu lösen. Sie können CByteArray-Klasse verwenden oder die Klasse CLongBinary verwenden. Im Allgemeinen ist die bevorzugte Methode zum CByteArray Verwalten großer Binärdaten.

CByteArray erfordert mehr Mehraufwand als CLongBinary aber fähiger, wie in der CByteArray-Klasse beschrieben. CLongBinary wird kurz in der CLongBinary-Klasse beschrieben.

Ausführliche Informationen zum CByteArray Arbeiten mit großen Datenelementen finden Sie in technischem Hinweis 45.

CByteArray-Klasse

CByteArray ist eine der MFC-Auflistungsklassen. Ein CByteArray Objekt speichert ein dynamisches Bytearray – das Array kann bei Bedarf vergrößert werden. Die Klasse bietet schnellen Zugriff nach Index, wie bei integrierten C++-Arrays. CByteArray Objekte können serialisiert und für Diagnosezwecke abgebildet werden. Die Klasse stellt Memberfunktionen zum Abrufen und Festlegen angegebener Bytes, zum Einfügen und Anfügen von Bytes und zum Entfernen eines Byte oder aller Bytes zur Seite. Diese Einrichtungen erleichtern die Analyse der Binärdaten. Wenn das binäre Objekt beispielsweise ein OLE-Objekt ist, müssen Sie möglicherweise einige Headerbytes durchlaufen, um das tatsächliche Objekt zu erreichen.

Verwenden von CByteArray in Recordsets

Indem Sie einem Felddatenmemb des Recordsets den Typ CByteArrayzukommen lassen, stellen Sie eine feste Basis bereit, aus der RFX die Übertragung eines solchen Objekts zwischen Dem Recordset und der Datenquelle verwalten kann und über die Sie die Daten innerhalb des Objekts bearbeiten können. RFX benötigt einen bestimmten Standort für abgerufene Daten, und Sie benötigen eine Möglichkeit, auf die zugrunde liegenden Daten zuzugreifen.

Ausführliche Informationen zum CByteArray Arbeiten mit großen Datenelementen finden Sie in technischem Hinweis 45.

CLongBinary-Klasse

Ein CLongBinary-Objekt ist eine einfache Shell um einen HGLOBAL Handle zu einem Speicherblock, der auf dem Heap zugeordnet ist. Wenn eine Tabellenspalte gebunden wird, die ein binäres großes Objekt enthält, weist RFX das HGLOBAL Handle zu, wenn die Daten an das Recordset übertragen werden müssen, und speichert den Handle im CLongBinary Feld des Recordsets.

Sie verwenden wiederum das HGLOBAL Handle, m_hDataum mit den Daten selbst zu arbeiten, die wie bei allen Handle-Daten verwendet werden. Hier fügt CByteArray Funktionen hinzu.

Achtung

CLongBinary-Objekte können nicht als Parameter in Funktionsaufrufen verwendet werden. Darüber hinaus verlangsamt die Implementierung, die ::SQLGetDataaufruft, die Bildlaufleistung für eine bildlauffähige Momentaufnahme notwendigerweise verlangsamt. Dies kann auch der Fall sein, wenn Sie einen Aufruf selbst verwenden ::SQLGetData , um dynamische Schemaspalten abzurufen.

Siehe auch

Recordset (ODBC)
Recordset: Abrufen von Summen und anderen Aggregatergebnissen (ODBC)
Datensatzfeldaustausch (RFX)