Procedura: Recupero delle colonne mediante IRow::GetColumns (o IRow::Open) e ISequentialStream
I dati di grandi dimensioni possono essere associati o recuperati utilizzando l'interfaccia ISequentialStream. Per le colonne associate il flag di stato DBSTATUS_S_TRUNCATED indica che i dati sono troncati.
Il codice di esempio completo si trova nel file FetchColumns_A.cpp. È possibile scaricare un archivio contenente l'esempio dalla pagina SQL Server Downloads su MSDN.
L'esempio è stato sviluppato utilizzando Microsoft Visual C++ 2005.
Nel codice seguente viene creata la tabella di esempio utilizzata dall'applicazione.
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
Nota sulla sicurezza |
---|
Se possibile, utilizzare l'autenticazione di Windows. Se non è disponibile, agli utenti verrà richiesto di immettere le credenziali in fase di esecuzione. Evitare di archiviare le credenziali in un file. Se è necessario rendere persistenti le credenziali, è consigliabile crittografarle utilizzando CryptoAPI Win32. |
Per recuperare le colonne mediante IRow::GetColumns (o IRow::Open) e ISequentialStream
Stabilire una connessione all'origine dati.
Eseguire il comando (in questo esempio ICommandExecute::Execute() viene chiamato con IID_IRow).
Recuperare i dati delle colonne utilizzando IRow::Open() o IRow::GetColumns().
IRow::Open() può essere utilizzato per aprire una ISequentialStream nella riga. Specificare DBGUID_STREAM per indicare che la colonna contiene un flusso di dati binari (è quindi possibile utilizzare IStream o ISequentialStream per leggere i dati dalla colonna).
Se viene utilizzato IRow::GetColumns(), l'elemento pData della struttura DBCOLUMNACCESS viene impostato in modo da puntare a un oggetto del flusso.
Utilizzare ISequentialStream::Read() ripetutamente per leggere il numero specificato di byte nel buffer del consumer.