Accès aux données XML
Il existe deux méthodes distinctes de récupération de données XML à partir d’une source de données : l’une utilise CStreamRowset et l’autre utilise CXMLAccessor.
Fonctionnalités | CStreamRowset | CXMLAccessor |
---|---|---|
Quantité de données transférées | Récupère les données de toutes les colonnes et lignes à la fois. | Récupère les données de toutes les colonnes, mais une seule ligne à la fois. Vous devez parcourir les lignes à l’aide de méthodes telles que MoveNext . |
Mise en forme de la chaîne | SQL Server met en forme la chaîne XML et l’envoie au consommateur. | Récupère les données d’ensemble de lignes dans son format natif (demande au fournisseur de l’envoyer en tant que chaînes Unicode), puis génère la chaîne contenant les données au format XML. |
Contrôler la mise en forme | Vous avez un certain niveau de contrôle sur la façon dont la chaîne XML est mise en forme en définissant certaines propriétés spécifiques à SQL Server 2000. | Vous n’avez aucun contrôle sur le format de la chaîne XML générée. |
Bien que CStreamRowset
fournit un moyen plus efficace de récupérer des données au format XML, il est uniquement pris en charge par SQL Server 2000.
Récupération de données XML à l’aide de CStreamRowset
Vous spécifiez CStreamRowset comme type d’ensemble de lignes dans votre CCommand
ou CTable
déclaration. Vous pouvez l’utiliser avec votre propre accesseur ou aucun accesseur, par exemple :
CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;
-ou-
CCommand<CNoAccessor, CStreamRowset> myCmd;
Normalement, lorsque vous appelez CCommand::Open
(en spécifiant, par exemple, CRowset
en tant que TRowset
classe), il obtient un IRowset
pointeur. ICommand::Execute
retourne un IRowset
pointeur, qui est stocké dans le m_spRowset
membre de l’objet CRowset
. Méthodes telles que MoveFirst
, MoveNext
et GetData
utilisez ce pointeur pour récupérer les données.
En revanche, lorsque vous appelez CCommand::Open
(mais spécifiez CStreamRowset
comme TRowset
classe), ICommand::Execute
retourne un ISequentialStream
pointeur, qui est stocké dans le m_spStream
membre de données de CStreamRowset. Vous utilisez ensuite la Read
méthode pour récupérer les données (chaîne Unicode) au format XML. Par exemple :
myCmd.m_spStream->Read()
SQL Server 2000 effectue la mise en forme XML et retourne toutes les colonnes et toutes les lignes de l’ensemble de lignes sous forme d’une chaîne XML.
Pour obtenir un exemple utilisant la Read
méthode, consultez Ajout d’une prise en charge XML au consommateur lors de l’implémentation d’un consommateur simple.
Remarque
La prise en charge XML à l’aide CStreamRowset
de SQL Server 2000 uniquement et nécessite que vous ayez le fournisseur OLE DB pour SQL Server 2000 (installé avec MDAC).
Récupération de données XML à l’aide de CXMLAccessor
CXMLAccessor vous permet d’accéder aux données d’une source de données en tant que données de chaîne lorsque vous n’avez aucune connaissance du schéma du magasin de données. CXMLAccessor
fonctionne comme CDynamicStringAccessorW
suit, sauf que l’ancien convertit toutes les données accessibles à partir du magasin de données en tant que données au format XML (étiquetées). Les noms des balises XML correspondent aussi étroitement que possible aux noms de colonnes du magasin de données.
Utilisez CXMLAccessor
comme vous le feriez pour toute autre classe d’accesseur, en le transmettant en tant que paramètre de modèle à CCommand
ou CTable
:
CTable<CXMLAccessor, CRowset> rs;
Utilisez GetXMLRowData pour récupérer des données de la table une ligne à la fois et parcourir les lignes à l’aide de méthodes telles que MoveNext
, par exemple :
// Open data source, session, and rowset
hr = rs.MoveFirst();
while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
CStringW strRowData;
myCmd.GetXMLRowData(strRowData);
printf_s( "%S\n", strRowData );
hr = rs.MoveNext();
}
Vous pouvez utiliser GetXMLColumnData pour récupérer les informations de colonne (type de données) en tant que données de chaîne au format XML.