Vue d’ensemble du Fournisseur simple Microsoft OLE DB

Le Fournisseur simple Microsoft OLE DB (OSP) permet à ADO d’accéder à toutes les données pour lesquelles un fournisseur a été écrit à l’aide du Kit de ressources du Fournisseur simple OLE DB (OSP). Les fournisseurs simples sont destinés à accéder à des sources de données qui ne nécessitent qu’une prise en charge de base d’OLE DB, comme des tableaux en mémoire ou des documents XML.

Paramètres de chaîne de connexion

Pour vous connecter au fichier DLL du Fournisseur simple OLE DB, définissez l’argument Provider pour la propriété ConnectionString sur :

MSDAOSP

Cette valeur peut également être définie ou lue à l’aide de la propriété Provider.

Vous pouvez vous connecter à des fournisseurs simples qui ont été inscrits en tant que fournisseurs OLE DB complets en utilisant le nom de fournisseur inscrit, déterminé par le rédacteur de fournisseur.

Chaîne de connexion typique

Voici une chaîne de connexion typique pour ce fournisseur :

"Provider=MSDAOSP;Data Source=serverName"

La chaîne se compose des mots clés suivants :

Mot clé Description
Fournisseur Spécifie le fournisseur OLE DB pour SQL Server.
Source de données Spécifie le nom d'un serveur.

Exemple de document XML

Le Fournisseur simple OLE DB (OSP) dans MDAC 2.7 ou version ultérieure, ainsi que les composants d’accès aux données Windows (Windows DAC) ont été améliorés pour prendre en charge l’ouverture d’objets ADO Recordset hiérarchiques sur des fichiers XML arbitraires. Ces fichiers XML peuvent contenir le schéma de persistance XML ADO, mais ce n’est pas obligatoire. Cela a été implémenté en connectant l’OSP au fichier MSXML2.DLL. Par conséquent, MSXML2.DLL ou version ultérieure est obligatoire.

Le fichier portfolio.xml utilisé dans l’exemple ci-après contient l’arborescence suivante :

Portfolio
   Stock
      Shares
      Symbol
      Price
      Info
         Company Name
         WebSite

L’objet source de données (DSO) XML utilise des heuristiques intégrées pour convertir les nœuds d’une arborescence XML en chapitres dans un objet Recordset hiérarchique.

À l’aide de ces heuristiques intégrées, l’arborescence XML est convertie en objet Recordset hiérarchique à deux niveaux présentant la forme suivante :

Parent Recordset
Shares, Symbol, Price, $Text
   Child Recordset
      Company Name, WebSite, $Text

Notez que les étiquettes Portfolio et Info ne sont pas représentées dans l’objet Recordset hiérarchique. Pour obtenir une explication de la façon dont le DSO XML convertit les arborescences XML en objets Recordset hiérarchiques, consultez les règles suivantes. La colonne $Text est abordée dans la section suivante.

Règles d’affectation d’éléments et d’attributs XML à des colonnes et des lignes

Le DSO XML suit une procédure pour affecter des éléments et attributs à des colonnes et à des lignes dans des applications liées à des données. Le XML est modélisé en tant qu’arborescence avec une étiquette contenant la hiérarchie entière. Par exemple, une description XML d’un livre pourrait contenir des étiquettes de chapitres, d’illustrations et de sections. Au niveau supérieur se trouverait l’étiquette de livre contenant les sous-éléments chapitres, illustrations et sections. Quand le DSO XML mappe des éléments XML à des lignes et à des colonnes, les sous-éléments, et non l’élément de niveau supérieur, sont convertis.

Le DSO XML utilise cette procédure pour convertir les sous-éléments :

  • Chaque sous-élément et attribut correspond à une colonne dans un objet Recordset dans la hiérarchie.

  • Le nom de la colonne est identique au nom du sous-élément ou attribut, sauf si l’élément parent a un attribut et un sous-élément portant le même nom, auquel cas un point d’exclamation (« ! ») est ajouté au début du nom de colonne du sous-élément.

  • Chaque colonne est soit une colonne simple contenant des valeurs scalaires (généralement des chaînes), soit une colonne Recordset contenant des objets Recordset enfants.

  • Les colonnes correspondant à des attributs sont toujours simples.

  • Les colonnes correspondant à des sous-éléments sont des colonnes Recordset si le sous-élément a ses propres sous-éléments ou attributs (ou les deux), ou si le parent du sous-élément a plusieurs instances du sous-élément en tant qu’enfants. Dans les autres cas, la colonne est simple.

  • Quand il existe plusieurs instances d’un sous-élément (sous différents parents), sa colonne est une colonne Recordset si l’une des instances implique une colonne Recordset, et n’est une colonne simple que si toutes les instances impliquent une colonne simple.

  • Tous les objets Recordset ont une colonne supplémentaire nommée $Text.

Le code nécessaire pour construire un objet Recordset est le suivant :

Dim adoConn as ADODB.Connection
Dim adoRS as ADODB.Recordset

Set adoRS = New ADODB.Connection
Set adoRS = New ADODB.Recordset

adoConn.Open "Provider=MSDAOSP; Data Source=MSXML2.DSOControl.2.6;"
adoRS.Open "https://WebServer/VRoot/portfolio.xml, adoConn

Notes

Le chemin d’accès du fichier de données peut être spécifié à l’aide de quatre conventions d’affectation de noms différentes.

'HTTP://
adoRS.Open "https://WebServer/VRoot/portfolio.xml", adoConn
'FILE://
adoRS.Open "file:/// C:\\Directory\\portfolio.xml", adoConn
'UNC Path
adoRS.Open "\\ComputerName\ShareName\portfolio.xml", adoConn
'Full DOS Path
adoRS.Open "C:\Directory\portfolio.xml", adoConn

Dès que l’objet Recordset est ouvert, les commandes habituelles de navigation dans un objet ADO Recordset peuvent être utilisées.

Les objets Recordset générés par l’OSP présentent quelques limitations :

  • Les curseurs clients (adUseClient) ne sont pas pris en charge.

  • Des objets Recordset hiérarchiques créés sur du XML arbitraire ne peuvent pas être conservés à l’aide la méthode Recordset.Save.

  • Les objets Recordset crées avec l’OSP sont en lecture seule.

  • Le DSO XML ajoute une colonne de données ($Text) à chaque objet Recordset dans la hiérarchie.

Pour plus d’informations sur le Fournisseur simple OLE DB, consultez Création d’un fournisseur simple.

Exemple de code

Le code Visual Basic suivant illustre l’ouverture d’un fichier XML arbitraire, la construction d’un objet Recordset hiérarchique, et l’écriture récursive de chaque enregistrement de chaque objet Recordset dans la fenêtre de débogage.

Voici un fichier XML simple qui contient des cotations boursières. Le code suivant utilise ce fichier pour construire un objet Recordset hiérarchique à deux niveaux.

<portfolio>
   <stock>
      <shares>100</shares>
      <symbol>MSFT</symbol>
      <price>$70.00</price>
      <info>
         <companyname>Microsoft Corporation</companyname>
         <website>https://www.microsoft.com</website>
      </info>
   </stock>
   <stock>
      <shares>100</shares>
      <symbol>AAPL</symbol>
      <price>$107.00</price>
      <info>
         <companyname>Apple Computer, Inc.</companyname>
         <website>https://www.apple.com</website>
      </info>
   </stock>
   <stock>
      <shares>100</shares>
      <symbol>DELL</symbol>
      <price>$50.00</price>
      <info>
         <companyname>Dell Corporation</companyname>
         <website>https://www.dell.com</website>
      </info>
    </stock>
    <stock>
       <shares>100</shares>
       <symbol>INTC</symbol>
       <price>$115.00</price>
       <info>
          <companyname>Intel Corporation</companyname>
          <website>https://www.intel.com</website>
       </info>
   </stock>
</portfolio>

Voici deux sous-procédures Visual Basic. La première crée l’objet Recordset et le transmet à la sous-procédure WalkHier qui descend de manière récursive dans la hiérarchie, en écrivant chaque objet Field de chaque enregistrement de chaque objet Recordset dans la fenêtre de débogage.

Private Sub BrowseHierRecordset()
' Add ADO 2.7 or later to Project/References
' No need to add MSXML2, ADO just passes the ProgID through to the OSP.

    Dim adoConn As ADODB.Connection
    Dim adoRS As ADODB.Recordset
    Dim adoChildRS As ADODB.Recordset

    Set adoConn = New ADODB.Connection
    Set adoRS = New ADODB.Recordset
    Set adoChildRS = ADODB.Recordset

    adoConn.Open "Provider=MSDAOSP; Data Source=MSXML2.DSOControl.2.6;"
    adoRS.Open "https://bwillett3/Kowalski/portfolio.xml", adoConn

    Dim iLevel As Integer
    iLevel = 0
    WalkHier iLevel, adoRS

End Sub

Sub WalkHier(ByVal iLevel As Integer, ByVal adoRS As ADODB.Recordset)
    iLevel = iLevel + 1
    PriorLevel = iLevel
    While Not adoRS.EOF
        For ndx = 0 To adoRS.Fields.Count - 1
            If adoRS.Fields(ndx).Name <> "$Text" Then
                If adoRS.Fields(ndx).Type = adChapter Then
                    Set adoChildRS = adoRS.Fields(ndx).Value
                    WalkHier iLevel, adoChildRS
                Else
                    Debug.Print iLevel & ": adoRS.Fields(" & ndx & _
                       ") = " & adoRS.Fields(ndx).Name & " = " & _
                       adoRS.Fields(ndx).Value
                End If
            End If
        Next ndx
        adoRS.MoveNext
    Wend
    iLevel = PriorLevel
End Sub