Condividi tramite


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 sicurezzaNota 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

  1. Stabilire una connessione all'origine dati.

  2. Eseguire il comando (in questo esempio ICommandExecute::Execute() viene chiamato con IID_IRow).

  3. 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.

  4. Utilizzare ISequentialStream::Read() ripetutamente per leggere il numero specificato di byte nel buffer del consumer.

Vedere anche

Altre risorse