Freigeben über


Übersicht über den einfachen Microsoft OLE DB-Anbieter

Der Microsoft OLE DB Simple Provider (OSP) ermöglicht ADO den Zugriff auf daten, für die ein Anbieter mithilfe des OLE DB Simple Provider (OSP)-Toolkitsgeschrieben wurde. Einfache Anbieter sollen auf Datenquellen zugreifen, die nur grundlegende OLE DB-Unterstützung erfordern, z. B. Speicherarrays oder XML-Dokumente.

Verbindungszeichenfolgenparameter

Um eine Verbindung mit der DLL des einfachen OLE DB-Anbieters herzustellen, legen Sie das Argument Provider auf die eigenschaft ConnectionString wie folgt fest:

MSDAOSP

Dieser Wert kann auch mithilfe der eigenschaft Provider festgelegt oder gelesen werden.

Sie können eine Verbindung mit einfachen Anbietern herstellen, die als vollständige OLE DB-Anbieter registriert wurden, indem Sie den registrierten Anbieternamen verwenden, der vom Anbieterautor bestimmt wird.

Typische Verbindungszeichenfolge

Eine typische Verbindungszeichenfolge für diesen Anbieter ist:

"Provider=MSDAOSP;Data Source=serverName"

Die Zeichenfolge besteht aus folgenden Schlüsselwörtern:

Schlüsselwort Beschreibung
Provider Gibt den OLE DB-Anbieter für SQL Server an.
Datenquelle Gibt den Namen eines Servers an.

XML-Dokumentbeispiel

Der OLE DB Simple Provider (OSP) in MDAC 2.7 oder höher und Windows Data Access Components (Windows DAC) wurde erweitert, um das Öffnen hierarchischer ADO-Recordsets über beliebige XML-Dateien zu unterstützen. Diese XML-Dateien können das ADO-XML-Persistenzschema enthalten, es ist jedoch nicht erforderlich. Dies wurde durch die Verbindung des OSP mit dem MSXML2.DLLimplementiert; daher ist MSXML2.DLL oder höher erforderlich.

Die Datei portfolio.xml, die im folgenden Beispiel verwendet wird, enthält die folgende Struktur:

Portfolio
   Stock
      Shares
      Symbol
      Price
      Info
         Company Name
         WebSite

Der XML-DSO verwendet integrierte Heuristiken, um die Knoten in einem XML-Baum in Kapitel eines hierarchischen Recordset-zu konvertieren.

Mithilfe dieser integrierten Heuristiken wird die XML-Struktur in einen zweistufigen hierarchischen Recordset der folgenden Form konvertiert.

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

Beachten Sie, dass die Tags "Portfolio" und "Info" nicht im hierarchischen Recordset-dargestellt werden. Eine Erläuterung zur Konvertierung der XML-DSO-Bäume in hierarchische Recordsetsfinden Sie in den folgenden Regeln. Die spalte $Text wird im folgenden Abschnitt erläutert.

Regeln zum Zuweisen von XML-Elementen und -Attributen zu Spalten und Zeilen

Der XML-DSO folgt einem Verfahren zum Zuweisen von Elementen und Attributen zu Spalten und Zeilen in datengebundenen Anwendungen. XML wird als Baum modelliert, mit einem Tag, der die gesamte Hierarchie enthält. Eine XML-Beschreibung eines Buchs kann z. B. Kapiteltags, Abbildungstags und Abschnittstags enthalten. Auf höchster Ebene wäre das Buch-Tag mit den Unterelementen Kapitel, Abbildung und Abschnitt. Wenn xml-DSO XML-Elemente Zeilen und Spalten zuordnet, werden die Unterelemente, nicht das Element der obersten Ebene, konvertiert.

Der XML-DSO verwendet dieses Verfahren zum Konvertieren der Unterelemente:

  • Jedes Unterelement und Attribut entspricht einer Spalte in einem Recordset in der Hierarchie.

  • Der Name der Spalte ist identisch mit dem Namen des Unterelements oder Attributs, es sei denn, das übergeordnete Element hat ein Attribut und ein Unterelement mit demselben Namen, in diesem Fall wird ein "!" dem Spaltennamen des Unterelements vorangestellt.

  • Jede Spalte ist entweder eine einfache Spalte, die skalare Werte enthält (in der Regel Zeichenfolgen), oder eine Recordset- Spalte, die untergeordnete Recordsetsenthält.

  • Spalten, die Attributen entsprechen, sind immer einfach.

  • Spalten, die Unterelementen entsprechen, sind Recordset Spalten, wenn entweder das Unterelement über eigene Unterelemente oder Attribute verfügt (oder beides), oder wenn das übergeordnete Element mehrere Instanzen dieses Unterelements als Kind aufweist. Andernfalls ist die Spalte einfach.

  • Wenn mehrere Instanzen eines Unterelements (unter verschiedenen übergeordneten Elemente) vorhanden sind, ist die Spalte eine Recordset- Spalte, wenn einer der Instanzen ein Recordset Spalte impliziert; Die Spalte ist nur dann einfach, wenn alle Instanzen eine einfache Spalte bedeuten.

  • Alle Recordsets verfügen über eine zusätzliche Spalte mit dem Namen $Text.

Der Code, der zum Erstellen eines Recordset- erforderlich ist, lautet wie folgt:

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

Anmerkung

Der Pfad der Datendatei kann mithilfe von vier unterschiedlichen Benennungskonventionen angegeben werden.

'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

Sobald das Recordset- geöffnet wurde, können die üblichen ADO-Recordset- Navigationsbefehle verwendet werden.

Recordsets, die durch das OSP erstellt werden, weisen einige Einschränkungen auf:

  • Clientcursor (adUseClient) werden nicht unterstützt.

  • Hierarchische Recordsets, die über beliebige XML erstellt wurden, können nicht mit Recordset.Savebeibehalten werden.

  • Recordsets, die mit OSP erstellt wurden, sind schreibgeschützt.

  • Das XMLDSO fügt jedem Recordset- in der Hierarchie eine zusätzliche Spalte mit Daten ($Text) hinzu.

Weitere Informationen zum einfachen OLE DB-Anbieter finden Sie unter Building a Simple Provider.

Codebeispiel

Der folgende Visual Basic-Code veranschaulicht das Öffnen einer beliebigen XML-Datei, das Erstellen eines hierarchischen Recordset, und das rekursive Schreiben jedes Datensatzes in jedes Recordset in das Debugfenster.

Hier ist eine einfache XML-Datei, die Aktienkurse enthält. Der folgende Code verwendet diese Datei, um ein zweistufiges hierarchisches Recordsetzu erstellen.

<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>

Es folgen zwei Visual Basic-Unterprozeduren. Das erste erstellt das Recordset- und übergibt es an die WalkHier- Unterprozedur, die rekursiv die Hierarchie durchläuft und jedes Field in jedem Datensatz in jedem Recordset- in das Debugfenster schreibt.

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