Freigeben über


Übersicht über den Microsoft OLE DB Simple Provider

Der Microsoft OLE DB Simple Provider (OSP) ermöglicht ActiveX Data Objects (ADO) den Zugriff auf beliebige Daten, für die mithilfe des OLE DB Simple Provider (OSP)-Toolkits ein Anbieter geschrieben wurde. Einfache Anbieter greifen auf Datenquellen zu, die nur grundlegende OLE DB-Unterstützung erfordern, z. B. speicherinterne Arrays oder XML-Dokumente.

Parameter der Verbindungszeichenfolge

Zum Herstellen einer Verbindung mit der OLE DB Simple Provider-DLL legen Sie das Provider-Argument für die ConnectionString-Eigenschaft auf den folgenden Wert fest:

MSDAOSP

Dieser Wert kann auch mithilfe der Provider-Eigenschaft 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 Anbieterwriter festgelegt wurde.

Typische Verbindungszeichenfolge

Eine typische Verbindungszeichenfolge für diesen Anbieter sieht wie folgt aus:

"Provider=MSDAOSP;Data Source=serverName"

Die Zeichenfolge enthält folgende Schlüsselwörter:

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

Beispiel für ein XML-Dokument

Der OLE DB Simple Provider 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, dies ist jedoch nicht erforderlich. Die Funktion wurde durch Verbinden des OSP mit MSXML2.DLL implementiert. Daher ist MSXML2.DLL oder höher erforderlich.

Die im folgenden Beispiel verwendete Datei portfolio.xml enthält diese Struktur:

Portfolio
   Stock
      Shares
      Symbol
      Price
      Info
         Company Name
         WebSite

Das XML-Data Source-Objekt (DSO) verwendet integrierte Heuristik, um die Knoten in einer XML-Struktur in Kapitel in einem hierarchischen Recordset zu konvertieren.

Mithilfe dieser integrierten Heuristik wird die XML-Struktur in ein hierarchisches Recordset mit zwei Ebenen im folgenden Format konvertiert:

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

Beachten Sie, dass die Portfolio- und Info-Tags im hierarchischen Recordset nicht dargestellt werden. Im folgenden Abschnitt zu den Regeln wird erläutert, wie das XML-DSO XML-Strukturen in hierarchische Recordsets konvertiert. Die Spalte „$Text“ wird im folgenden Abschnitt erläutert.

Regeln für die Zuweisung von XML-Elementen und -Attributen zu Spalten und Zeilen

Das XML-DSO folgt einer bestimmten Prozedur, um Spalten und Zeilen in datengebundenen Anwendungen Elemente und Attribute zuzuweisen. XML wird als Struktur mit einem Tag modelliert, das die gesamte Hierarchie enthält. Beispielsweise könnte die XML-Beschreibung eines Buchs Kapiteltags, Abbildungstags und Abschnittstags enthalten. Die höchste Ebene wäre das Buchtag, das die Unterelemente Kapitel, Abbildung und Abschnitt enthält. Wenn das XML-DSO Zeilen und Spalten XML-Elemente zuordnet, werden die Unterelemente konvertiert – nicht das Element der obersten Ebene.

Das XML-DSO verwendet die folgende Prozedur zum Konvertieren der Unterelemente:

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

  • Der Name der Spalte ist mit dem Namen des Unterelements oder Attributs identisch, es sei denn, das übergeordnete Element verfügt über ein Attribut und ein Unterelement mit demselben Namen. In diesem Fall wird dem Spaltennamen des Unterelements ein Ausrufezeichen (!) vorangestellt.

  • Jede Spalte ist entweder eine einfache Spalte, die Skalarwerte (normalerweise Zeichenfolgen) enthält, oder eine Recordset-Spalte, die untergeordnete Recordsets enthält.

  • Spalten, die Attributen entsprechen, sind immer einfach.

  • Spalten, die Unterelementen entsprechen, sind Recordset-Spalten, wenn entweder das Unterelement über eigene Unterelemente und/oder Attribute verfügt oder das übergeordnete Element des Unterelements über mehr als eine Instanz des Unterelements als untergeordnetes Element verfügt. Andernfalls ist die Spalte einfach.

  • Wenn mehrere Instanzen eines Unterelements (unter verschiedenen übergeordneten Elementen) vorhanden sind, ist die zugehörige Spalte eine Recordset-Spalte, sofern eine der Instanzen eine Recordset-Spalte impliziert. Die zugehörige Spalte ist nur einfach, wenn alle Instanzen eine einfache Spalte implizieren.

  • Alle Recordsets verfügen über eine zusätzliche Spalte namens „$Text“.

Im Folgenden sehen Sie den erforderlichen Code zum Erstellen eines Recordsets:

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

Hinweis

Der Pfad der Datendatei kann mit vier verschiedenen Namenskonventionen 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.

Für Recordsets, die vom OSP generiert wurden, gelten einige Einschränkungen:

  • Clientcursor (adUseClient) werden nicht unterstützt.

  • Hierarchische Recordsets, die über beliebige XML erstellt wurden, können nicht mithilfe von Recordset.Save persistiert werden.

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

  • Das XML-DSO fügt jedem Recordset in der Hierarchie eine zusätzliche Datenspalte ($Text) hinzu.

Weitere Informationen zum OLE DB Simple Provider finden Sie unter Erstellen eines einfachen Anbieters.

Codebeispiel

Der folgende Visual Basic-Code veranschaulicht das Öffnen einer beliebigen XML-Datei, das Erstellen eines hierarchischen Recordsets und das rekursive Schreiben der einzelnen Datensätze jedes Recordsets in das Debugfenster.

Im Folgenden sehen Sie eine einfache XML-Datei, die Aktienkurse enthält. Der folgende Code verwendet diese Datei, um ein hierarchisches Recordset mit zwei Ebenen zu 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>

Nachfolgend sind zwei Visual Basic-Unterprozeduren aufgeführt. Die erste Unterprozedur erstellt das Recordset und übergibt es an die WalkHier-Unterprozedur, die die Hierarchie rekursiv durchläuft und jedes Feld in den einzelnen Datensätzen 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