Partager via


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, MoveNextet 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.

Voir aussi

Utilisation des accesseurs