Condividi tramite


Panoramica del Microsoft OLE DB Simple Provider

Microsoft OLE DB Simple Provider (OSP) consente ad ADO di accedere a tutti i dati per i quali è stato scritto un provider usando il toolkit OSP (OLE DB Simple Provider) . I provider semplici sono destinati ad accedere alle origini dati che richiedono solo il supporto OLE DB fondamentale, ad esempio matrici in memoria o documenti XML.

Parametri della stringa di connessione

Per connettersi alla DLL del provider semplice OLE DB, impostare l'argomento provider di sulla proprietà ConnectionString su:

MSDAOSP

Questo valore può essere impostato o letto anche usando la proprietà Provider di.

È possibile connettersi a provider elementari registrati come provider OLE DB completi utilizzando il nome del provider registrato, determinato dall'autore del provider.

Stringa di connessione tipica

Una stringa di connessione tipica per questo provider è:

"Provider=MSDAOSP;Data Source=serverName"

La stringa è costituita da queste parole chiave:

Parola chiave Descrizione
provider Specifica il provider OLE DB per SQL Server.
Fonte Dati Specifica il nome di un server.

Esempio di documento XML

Il provider OLE DB Simple Provider (OSP) in MDAC 2.7 o versioni successive e Windows Data Access Components (Windows DAC) è stato migliorato per supportare l'apertura di set di record ADO gerarchici Recordset su file XML arbitrari. Questi file XML possono contenere lo schema di persistenza XML ADO, ma non è obbligatorio. È stato implementato collegando l'OSP all'MSXML2.DLL; pertanto è necessaria la MSXML2.DLL o una versione successiva.

Il file portfolio.xml usato nell'esempio seguente contiene l'albero seguente:

Portfolio
   Stock
      Shares
      Symbol
      Price
      Info
         Company Name
         WebSite

L'oggetto DSO XML utilizza euristiche integrate per convertire i nodi in un albero XML in capitoli in un oggetto Recordset gerarchico .

Usando queste euristiche predefinite, l'albero XML viene convertito in un oggetto Recordset gerarchico a due livelli del formato seguente:

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

Si noti che i tag Portfolio e Info non sono rappresentati nel Recordset gerarchico . Per una spiegazione del modo in cui DSO XML converte gli alberi XML in set di record gerarchici, vedere le regole seguenti. La colonna $Text è descritta nella sezione seguente.

Regole per l'assegnazione di elementi e attributi XML a colonne e righe

L'oggetto DSO XML segue una procedura per l'assegnazione di elementi e attributi a colonne e righe nelle applicazioni vincolate ai dati. XML viene modellato come albero con un tag che contiene l'intera gerarchia. Ad esempio, una descrizione XML di un libro può contenere tag di capitolo, tag di figura e tag di sezione. Al livello più alto sarebbe il tag libro, contenente i sottoelementi capitolo, figura e sezione. Quando xml DSO esegue il mapping di elementi XML a righe e colonne, i sottoelementi, non l'elemento di primo livello, vengono convertiti.

L'oggetto DSO XML usa questa procedura per convertire i sottoelementi:

  • Ogni sottoelemento e attributo corrisponde a una colonna in alcuni recordset nella gerarchia.

  • Il nome della colonna corrisponde al nome del sottoelemento o dell'attributo, a meno che l'elemento padre non abbia un attributo e un sottoelemento con lo stesso nome, nel qual caso un elemento "!" viene anteporto al nome della colonna del sottoelemento.

  • Ogni colonna è una colonna semplice che contiene valori scalari (in genere stringhe) o una colonna recordset contenente recordset figlio .

  • Le colonne corrispondenti agli attributi sono sempre semplici.

  • Le colonne corrispondenti ai sottoelementi sono Oggetto Recordset colonne se il sottoelemento dispone di sottoelementi o attributi specifici (o entrambi) oppure l'elemento padre del sottoelemento ha più di un'istanza del sottoelemento come elemento figlio. In caso contrario, la colonna è semplice.

  • Quando sono presenti più istanze di un sottoelemento (in elementi padre diversi), la relativa colonna è una colonna Recordset se qualunque delle istanze implica una colonna Recordset; la colonna è semplice solo se tutte le istanze implicano una colonna semplice.

  • Tutti i recordset di hanno una colonna aggiuntiva denominata $Text.

Il codice necessario per costruire un Recordset di è il seguente:

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

Nota

Il percorso del file di dati può essere specificato usando quattro convenzioni di denominazione diverse.

'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

Non appena è stata aperta la recordset di, è possibile usare i soliti comandi di navigazione recordset ADO.

I recordset generati dall'OSP hanno alcune limitazioni:

  • I cursori client (adUseClient) non sono supportati.

  • I recordset di gerarchici creati su CODICE XML arbitrario non possono essere resi persistenti usando Recordset.Save.

  • i recordset creati con l'OSP sono di sola lettura.

  • XMLDSO aggiunge una colonna aggiuntiva di Dati ($Text) a ogni recordset nella gerarchia.

Per altre informazioni sul provider semplice OLE DB, vedere Creazione di un provider semplice.

Esempio di codice

Il codice Visual Basic seguente dimostra come aprire un file XML arbitrario, costruire un Recordset gerarchicoe scrivere ricorsivamente ogni record di ciascun Recordset nella finestra di debug.

Di seguito è riportato un semplice file XML che contiene quotazioni azionarie. Il codice seguente usa questo file per costruire un oggetto Recordset gerarchico a due livelli .

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

Di seguito sono riportate due sotto procedure di Visual Basic. Il primo crea il Recordset e lo passa alla sub procedura WalkHier, che scorre in modo ricorsivo la gerarchia, scrivendo ogni campo di ciascun record di ogni Recordset nella finestra di debug.

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