Vorgehensweise: Abrufen von Spalten mithilfe von IRow::GetColumns (oder IRow::Open) und ISequentialStream

Große Datenmengen können mit der ISequentialStream-Schnittstelle gebunden oder abgerufen werden. Bei gebundenen Spalten gibt das Statusflag DBSTATUS_S_TRUNCATED an, dass die Daten abgeschnitten werden.

Den vollständigen Beispielcode finden Sie in der Datei FetchColumns_A.cpp. Sie können ein Archiv herunterladen, das das Beispiel von der SQL Server Downloads-Seite auf MSDN enthält.

Dieses Beispiel wurde mit Microsoft Visual C++ 2005 entwickelt.

Im nachstehenden Code wird die von der Anwendung verwendete Beispieltabelle erstellt.

USE AdventureWorks2008R2;
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'MyTable')
     DROP TABLE MyTable;
GO

CREATE TABLE MyTable
(
     col1  int,
     col2  varchar(50),
     col3  char(50),
     col4  datetime,
     col5  float,
     col6  money,
     col7  sql_variant,
     col8  binary(50),
     col9  text,
     col10 image
);
GO

/* Enter data. */
INSERT INTO MyTable
values
(
     10,
     'abcdefghijklmnopqrstuvwxyz',
     'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
     '11/1/1999 11:52 AM',
     3.14,
     99.95,
     CONVERT(nchar(50), N'AbCdEfGhIjKlMnOpQrStUvWxYz'),
     0x123456789,
     REPLICATE('AAAAABBBBB', 500),
     REPLICATE(0x123456789, 500)
);
GO
SicherheitshinweisSicherheitshinweis

Verwenden Sie nach Möglichkeit die Windows-Authentifizierung. Wenn die Windows-Authentifizierung nicht verfügbar ist, fordern Sie die Benutzer auf, ihre Anmeldeinformationen zur Laufzeit einzugeben. Die Anmeldeinformationen sollten nicht in einer Datei gespeichert werden. Wenn Sie die Anmeldeinformationen speichern müssen, sollten Sie sie mit der Win32 Crypto-API verschlüsseln.

So rufen Sie Spalten mithilfe von IRow::GetColumns (oder IRow::Open) und ISequentialStream ab

  1. Stellen Sie eine Verbindung mit der Datenquelle her.

  2. Führen Sie den Befehl aus (in diesem Beispiel wird ICommandExecute::Execute() mit IID_IRow aufgerufen).

  3. Rufen Sie die Spaltendaten mit IRow::Open() oder IRow::GetColumns() ab.

    • IRow::Open() kann verwendet werden, um in der Zeile einen ISequentialStream zu öffnen. Geben Sie DBGUID_STREAM an, um anzugeben, dass die Spalte einen Stream von Binärdaten enthält (mit IStream oder ISequentialStream können Daten aus der Spalte gelesen werden).

    • Wenn IRow::GetColumns() verwendet wird, wird das pData-Element der DBCOLUMNACCESS-Struktur so festgelegt, dass es auf ein Streamobjekt zeigt.

  4. Verwenden Sie ISequentialStream::Read() mehrmals, um die angegebene Anzahl von Bytes in den Consumerpuffer einzulesen.

Siehe auch

Andere Ressourcen