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 AdventureWorks
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é |
---|
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
Établissez une connexion à la source de données.
Exécutez la commande (dans cet exemple, ICommandExecute::Execute() est appelé avec IID_IRow).
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.
Utilisez ISequentialStream::Read() à plusieurs reprises pour lire le nombre spécifié d'octets dans la mémoire tampon du consommateur.