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
Sicherheitshinweis |
---|
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
Stellen Sie eine Verbindung mit der Datenquelle her.
Führen Sie den Befehl aus (in diesem Beispiel wird ICommandExecute::Execute() mit IID_IRow aufgerufen).
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.
Verwenden Sie ISequentialStream::Read() mehrmals, um die angegebene Anzahl von Bytes in den Consumerpuffer einzulesen.