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 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
Establezca una conexión con el origen de datos.
Ejecute el comando (en este ejemplo, se llama a ICommandExecute::Execute() con IID_IRow).
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.
Use repetidamente ISequentialStream::Read() para leer el número de bytes especificado en el búfer del consumidor.