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