Artikel-ID: 190958 - Geändert am: Mittwoch, 2. März 2005 - Version: 2.4

Beispiel: AOTBLOB Lese-/Schreibvorgänge BLOB mit OLE DB-Consumer-Vorlage

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.

Auf dieser Seite

Alles erweitern | Alles schließen

Zusammenfassung

Das AOTBLOB-Beispiel veranschaulicht lesen und Schreiben von long binary (BLOB) Datenfelder mithilfe der ATL OLE DB-Consumer-Vorlage-Klassen. Das Beispiel enthält Code zum Laden und speichern eine Bitmap-Datei und zum Laden und speichern Sie die Bitmap in einer Datenbanktabelle.

Das Beispiel veranschaulicht auch Benutzer zum Auswählen einer Datenquelle mithilfe des Dialogfeldes Microsoft Datenverknüpfung auffordern, eine Verbindung auf die gleiche Weise wie eine durchsuchen herstellen, in ODBC.

Hinweis: Das Beispiel die automatisch wird eine Tabelle mit dem Namen BLOB1234 auf der Ziel-Datenquelle für das Einfügen und die Extraktion der BLOB-Feld erstellt wird.

Der Beispielcode wurde mit folgenden OLE DB-Providern getestet:
Microsoft Jet 3.51 OLE DB-Provider (Msjtor35.dll 3.52.1527.4)
Microsoft OLE DB Provider für Oracle (msdaora.dll 02.00.3002.15)
Microsoft OLE DB Provider für SQLServer (SQLOLEDB.dll 07.00.0502)
Microsoft OLE DB Provider für ODBC-Treiber (msdasql.dll 02.00.3002.11)
Im Beispiel wurde auch mit den folgenden ODBC-Treibern Zugriff über den Microsoft OLE DB-Provider für ODBC-Treiber getestet:
Microsoft SQL Server-ODBC-Treibers (Sqlsrv32.dll 3.60.0319).
Microsoft ODBC-Treiber für Oracle (Msora32.dll 2.573.292700).
Microsoft Access-Treiber (Odbcjt32.dll 3.51.1713)

Weitere Informationen

Die folgenden Dateien stehen im Microsoft Download Center zum Download zur Verfügung:


Aotblob.exe (http://download.microsoft.com/download/vc60ent/sample3/1/win98/en-us/aotblob.exe)

Weitere Informationen zum Download von Microsoft Support-Dateien finden Sie in folgendem Artikel der Microsoft Knowledge Base:
119591  (http://support.microsoft.com/kb/119591/EN-US/ ) So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit, wodurch nicht autorisierte Änderungen an der Datei weitestgehend verhindert werden.

Lesen von BLOB-Daten mithilfe der ATL OLE DB-Consumervorlagen

Der ATL OLE DB-Consumer-Vorlage Assistent erstellt eine voll funktionsfähige lesen-nur Klasse, die ein long binary (BLOB) Datenbankfeld liest. Wenn Sie in das Feld long binary schreiben möchten, müssen Sie Änderungen auf die Assistenten-generierten Klasse vornehmen.

In einer vom Assistenten generierten OLE DB Consumerklasse füllt der Provider automatisch alle BLOB-Feld-Membervariablen mit einem Zeiger ISequentialStream für die aktuelle Zeile. Um Daten aus dem BLOB-Feld zu lesen, rufen Sie die Read-Methode der die ISequentialStream-Schnittstelle in einer Schleife, bis keine Daten mehr vom OLE DB-Provider gesendet werden. Beachten Sie, dass die meisten Anbieter nicht Sie mit der gesamte Länge der Daten vor dem Lesen der Daten bereitstellen, so müssen Sie einen Puffer, dynamisch, um die Daten enthalten, beim Lesen erstellen.

Schreiben von BLOB-Daten mithilfe der ATL OLE DB-Consumervorlagen

Um in ein BLOB-Feld zu schreiben, müssen Sie Version den ISequentialStream-Zeiger, die Sie von den OLE DB-Anbieter bereitgestellt wurden und ersetzen es durch einen ISequentialStream-Zeiger, den Sie implementieren. Der Anbieter ruft dann ISequentialStream:: Read für den Schnittstellenzeiger, bis keine weitere Bytes zurückgegeben werden. In einer Weise kehrt die Rolle des der Consumer und Anbieter. Der Consumer stellt den ISequentialStream-Zeiger, und der Anbieter ruft ISequentialStream:: Read. Beachten Sie, dass bestimmte OLE DB-Provider erforderlich, dass Sie vorab angeben, wie viele Bytes beim Schreiben von BLOB-Daten in das Feld "BLOB" stehen. Mit beliebig viele Anbieter wie möglich arbeiten möchten, enthält das Beispiel die Länge Informationen an dem Anbieter in jedem Fall.

Um das Lesen und Schreiben von BLOB-Daten mit OLE DB zu vereinfachen, ist das AOTBLOB-Beispiel eine Hilfsklasse CISSHelper aufgerufen. Die CISSHelper-Klasse implementiert die gesamte ISequentialStream-Schnittstelle. Die Klasse hat auch den integrierten Puffer zum Speichern und extrahieren die BLOB-Daten verwendet wird. Beachten Sie, dass die CISSHelper selbst zerstören nicht, wenn seine Veröffentlichung Anzahl auf NULL, eine typische COM-Schnittstelle ähnelt fällt. Die AddRef und Release verbleiben in, der Provider aufgerufen werden, jedoch in diesem Beispiel verwendet einen Stapel zugewiesene Objekt und der C++-Destruktor zum Bereinigen des Objekts.

Um Schreiben in ein BLOB-Feld zu ermöglichen, muss die ändern Sie das ATL-OLE DB-Consumer-Assistenten generierte Bindung Makro und Unterstützung für ein Feld Länge und Status Indikator als unten hinzufügen:
   // Before:

   BEGIN_COLUMN_MAP(...)
   // Various fields..
      BLOB_ENTRY(2, IID_ISequentialStream,STGM_READ, m_BLOBDATA)
   // Various fields...
   END_COLUMN_MAP()

   // After:
   ULONG m_BLOBDATA_LENGTH;
   ULONG m_BLOBDATA_STATUS;

   BEGIN_COLUMN_MAP(...)
   // Various fields...
      BLOB_ENTRY_LENGTH_STATUS(2, IID_ISequentialStream, \ 
                               STGM_READ, m_BLOBDATA, \ 
                m_BLOBDATA_LENGTH, m_BLOBDATA_STATUS)
   // Various fields...
   END_COLUMN_MAP()
				
ist der Indikator Länge erforderlich, um die Länge der BLOB-Daten für dem OLE DB-Provider bereitstellen, wenn Sie in das BLOB schreiben. Beachten Sie, dass die Definition der BLOB_ENTRY_LENGTH_STATUS-Makro in das AOTBLOB-Beispielprojekt enthalten ist ? ist nicht in ATL-Headerdateien für die ATL-OLE DB-Consumer-Klassen enthalten.

Keine weiteren Änderungen an den vom Assistenten generierten Vorlagen sind erforderlich.

Zum Lesen aus Feld BLOB mit einer geänderten (Länge und Status hinzugefügt) Consumer Vorlage-Klasse, befolgen Sie diese grundlegenden Formel:

  1. Öffnen Sie die geänderte ATL-OLE DB-Consumerklasse.
  2. Wechseln Sie zu dem gewünschten Datensatz.
  3. Überprüfen Sie den Status der BLOB-Feld. Wenn die Statusanzeige für BLOB-Feld nicht auf DBSTATUS_S_OK festgelegt ist, müssen Sie eine null BLOB-Feld möglicherweise. Verwenden Sie keine Zeiger ISequentialStream Anbieter erstellt, wenn das Feld "Status" nicht auf DBSTATUS_S_OK festgelegt ist; es kann keine gültigen Zeiger.
  4. Schleife und ISequentialStream:: Read in blockiert, bis die zurückgegebenen Bytes Parameter Lesen aller Daten gibt Aufruf wird gelesen. Sie können die eingehenden Daten in Blöcken innerhalb der Schleife verarbeiten oder kombinieren die Blöcke in einen großen Puffer für die spätere Verwendung.
  5. Rufen Sie FreeRecordMemory() der Vorlage-Klasse alle Feld Puffer freigeben.
  6. Wechseln zum nächsten Datensatz, schließen Sie das Recordset und usw..
Um in den BLOB-Feld zu schreiben, gehen Sie folgendermaßen allgemeinen vor:

  1. Öffnen Sie die geänderte ATL-OLE DB-Consumerklasse.
  2. Wechseln Sie zu dem gewünschten Datensatz.
  3. Überprüfen Sie den Status der BLOB-Feld. Wenn die Statusanzeige für BLOB-Feld nicht auf DBSTATUS_S_OK festgelegt ist, müssen Sie eine null BLOB-Feld möglicherweise. Wenn der Status DBSTATUS_S_OK ist, müssen Sie Release aufrufen, auf die IsequentialStream Zeiger vom Anbieter erteilt.
  4. Kopieren der Daten in den BLOB-Feld in einer CISSHelper eingefügt werden soll Class-Objekt. Das Objekt implementiert die ISequentialStream:: Write-Methode, die Sie hier beim.
  5. Setzen Sie den Indikator Länge auf die Länge der Daten in der CISSHelper Class-Objekt.
  6. Legen Sie die Statusanzeige auf DBSTATUS_S_OK.
  7. Legen Sie das BLOB Memberfeld (die ISequentialStream-Zeiger), auf das CISSHelper-Objekt.
  8. Rufen Sie die SetData-Methode der Consumer-Klasse, die Aktualisierung auszulösen. Zu diesem Zeitpunkt Klasse die Anbieter-Aufrufe ISequentialStream:: Read, auf die CISSHelper in aller Daten zu laden.
  9. Rufen Sie FreeRecordMemory() der Consumer-Klasse alle Feld Puffer freigeben.
  10. Wechseln Sie zum nächsten aufzeichnen, Recordset geschlossen und usw..
Hinweis: Wenn Sie ändern einen vorhandenen Datensatz einfach ändern Schritt 7 oben, um Insert() rather than SetData() aufrufen, anstatt einen neuen Datensatz hinzufügen möchten.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft OLE DB 2.7, wenn verwendet mit:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Keywords: 
kbmt kbdownload kbconsumer kbdatabase kbdtl kbfile kbhowto KB190958 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 190958  (http://support.microsoft.com/kb/190958/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.