Share via


Procédure : extraire des colonnes avec IRow::GetColumns (ou IRow::Open) et ISequentialStream

Les grandes données peuvent être liées ou extraites à l'aide de l'interface ISequentialStream. Pour les colonnes dépendantes, l'indicateur d'état DBSTATUS_S_TRUNCATED indique que les données sont tronquées.

L'exemple de code complet se trouve dans le fichier FetchColumns_A.cpp. Vous pouvez télécharger une archive contenant l'exemple à partir de la page de Téléchargements SQL Server sur MSDN.

Cet exemple a été développé à l'aide de Microsoft Visual C++ 2005.

Le code suivant crée l'exemple de table utilisé par l'application.

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
Remarque relative à la sécuritéRemarque relative à la sécurité

Si possible, utilisez l'authentification Windows. Si l'authentification Windows n'est pas disponible, invitez les utilisateurs à entrer leurs informations d'identification au moment de l'exécution. Évitez de stocker ces informations dans un fichier. Si vous devez rendre les informations d'identification persistantes, chiffrez-les avec l'API de chiffrement Win32.

Pour extraire des colonnes avec IRow::GetColumns (ou IRow::Open) et ISequentialStream

  1. Établissez une connexion à la source de données.

  2. Exécutez la commande (dans cet exemple, ICommandExecute::Execute() est appelé avec IID_IRow).

  3. Extrayez les données de la colonne à l'aide de IRow::Open() ou IRow::GetColumns().

    • IRow::Open() peut être utilisé pour ouvrir un objet ISequentialStream sur la ligne. Spécifiez DBGUID_STREAM pour indiquer que la colonne contient un flux de données binaires (IStream ou ISequentialStream peut ensuite être utilisé pour lire les données de la colonne).

    • Si IRow::GetColumns() est utilisé, l'élément pData de la structure DBCOLUMNACCESS est configuré de façon à pointer vers un objet de flux.

  4. Utilisez ISequentialStream::Read() à plusieurs reprises pour lire le nombre spécifié d'octets dans la mémoire tampon du consommateur.

Voir aussi

Autres ressources