Compartir a través de


Cómo capturar columnas mediante IRow::GetColumns (o IRow::Open) e ISequentialStream

Los datos grandes pueden enlazarse o recuperarse mediante la interfaz ISequentialStream. En el caso de las columnas enlazadas, la marca de estado DBSTATUS_S_TRUNCATED indica que se truncan los datos.

Encontrará el código de ejemplo completo en el archivo FetchColumns_A.cpp. Puede descargar un archivo que contiene el ejemplo en la página de descargas de SQL Server en MSDN.

Este ejemplo se desarrolló con Microsoft Visual C++ 2005.

En el siguiente código se crea la tabla de ejemplo que la aplicación utiliza.

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 de seguridadNota de seguridad

Siempre que sea posible, utilice la autenticación de Windows. Si la autenticación de Windows no está disponible, solicite a los usuarios que escriban sus credenciales en tiempo de ejecución. No guarde las credenciales en un archivo. Si tiene que conservar las credenciales, debería cifrarlas con la API de criptografía de Win32.

Para capturar columnas mediante IRow::GetColumns (o IRow::Open) e ISequentialStream

  1. Establezca una conexión con el origen de datos.

  2. Ejecute el comando (en este ejemplo, se llama a ICommandExecute::Execute() con IID_IRow).

  3. Capture los datos de columna mediante IRow::Open() o IRow::GetColumns().

    • IRow::Open() puede utilizarse para abrir una interfaz ISequentialStream en la fila. Especifique DBGUID_STREAM para indicar que la columna contiene una secuencia de datos binarios (IStream o ISequentialStream puede usarse a para leer los datos de la columna).

    • Si se utiliza IRow::GetColumns(), el elemento pData de la estructura DBCOLUMNACCESS se establece de modo que apunte a un objeto de secuencia.

  4. Use repetidamente ISequentialStream::Read() para leer el número de bytes especificado en el búfer del consumidor.

Vea también

Otros recursos