Visão geral do Microsoft OLE DB Simple Provider
O Provedor Simples (OSP) do Microsoft OLE DB permite que o ADO acesse quaisquer dados para os quais um provedor foi desenvolvido usando o kit de ferramentas do Provedor Simples do OLE DB (OSP). Provedores simples destinam-se a acessar fontes de dados que exigem apenas suporte fundamental do OLE DB, como matrizes na memória ou documentos XML.
Parâmetros de cadeia de conexão
Para se conectar à DLL do Provedor Simples OLE DB, defina o argumento Provider para a propriedade ConnectionString como:
MSDAOSP
Esse valor também pode ser definido ou lido usando a propriedade provedor .
Você pode se conectar a provedores que foram registrados como provedores OLE DB completos usando o nome do provedor registrado, determinado pelo autor do provedor.
Cadeia de conexão típica
Uma cadeia de conexão típica para esse provedor é:
"Provider=MSDAOSP;Data Source=serverName"
A cadeia de caracteres consiste nessas palavras-chave:
Palavra-chave | Descrição |
---|---|
Provedor | Especifica o provedor OLE DB para SQL Server. |
Fonte de dados | Especifica o nome de um servidor. |
Exemplo de documento XML
O OSP (Provedor Simples do OLE DB) no MDAC 2.7 ou posterior e os Componentes de Acesso a Dados do Windows (Windows DAC) foram aprimorados para dar suporte à abertura de conjuntos de registros do ADO hierárquico em arquivos XML arbitrários. Esses arquivos XML podem conter o esquema de persistência XML do ADO, mas não são necessários. Isso foi implementado conectando o OSP ao MSXML2.DLL; portanto, é necessário utilizar o MSXML2.DLL ou posterior.
O arquivo portfolio.xml usado no exemplo a seguir contém a seguinte árvore:
Portfolio
Stock
Shares
Symbol
Price
Info
Company Name
WebSite
O DSO XML usa heurísticas embutidas para transformar nós de uma árvore XML em capítulos de um conjunto de registros hierárquico.
Usando essas heurísticas internas, a árvore XML é convertida em uma recordset hierárquica de dois níveis do seguinte formulário:
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
Observe que as marcas Portfólio e Informações não são representadas no conjunto de registros hierárquico. Para obter uma explicação de como o DSO XML converte árvores XML em conjuntos de registros hierárquicos, consulte as regras a seguir. A coluna $Text é discutida na seção a seguir.
Regras para atribuir elementos XML e atributos a colunas e linhas
O DSO XML segue um procedimento para atribuir elementos e atributos a colunas e linhas em aplicativos associados a dados. O XML é modelado como uma árvore com uma marca que contém a hierarquia inteira. Por exemplo, uma descrição XML de um livro pode conter marcas de capítulo, marcas de figura e marcas de seção. No nível mais alto estaria o tag de livro, contendo os subelementos capítulo, figura e seção. Quando o DSO XML mapeia elementos XML para linhas e colunas, os subelementos, não o elemento de nível superior, são convertidos.
O DSO XML usa este procedimento para converter os subelementos:
Cada subelemento e atributo corresponde a uma coluna em algum Recordset na hierarquia.
O nome da coluna é o mesmo que o nome do subelemento ou atributo, a menos que o elemento pai tenha um atributo e um subelemento com o mesmo nome, caso em que um "!" é anexado ao nome da coluna do subelemento.
Cada coluna é uma coluna simples que contém valores escalares (geralmente cadeias de caracteres) ou uma coluna Recordset que contém conjuntos de registros filho.
As colunas correspondentes aos atributos são sempre simples.
As colunas correspondentes aos subelementos são colunas do recordset , se o subelemento tiver seus próprios subelementos ou atributos (ou ambos), ou se o elemento pai do subelemento tiver mais de uma instância do subelemento como um elemento filho. Caso contrário, a coluna é simples.
Quando há várias instâncias de um subelemento (em pais diferentes), sua coluna é uma coluna Recordset se qualquer das instâncias implicar uma coluna Recordset; sua coluna será simples somente se todas as instâncias implicarem uma coluna simples.
Todos os conjuntos de registros têm uma coluna adicional chamada $Text.
O código necessário para construir um conjunto de registros é o seguinte:
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
O caminho do arquivo de dados pode ser especificado usando quatro convenções de nomenclatura diferentes.
'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
Assim que o Recordset for aberto, os comandos de navegação comuns do Recordset ADO poderão ser usados.
conjuntos de registros gerados pelo OSP têm algumas limitações:
Não há suporte para cursores de cliente (adUseClient).
Os conjuntos de registros de hierárquicos criados por XML arbitrário não podem ser persistidos usando Recordset.Save.
conjuntos de registros criados com o OSP são somente leitura.
O XMLDSO adiciona uma coluna adicional de Data ($Text) a cada conjunto de registros na Hierarquia.
Para obter mais informações sobre o Provedor Simples do OLE DB, consulte criando um provedor simples.
Exemplo de código
O código do Visual Basic a seguir demonstra a abertura de um arquivo XML arbitrário, a construção de um conjunto de registros hierárquicoe a gravação recursiva de cada registro de cada conjunto de registros na janela de depuração.
Aqui está um arquivo XML simples que contém cotações de ações. O código a seguir usa esse arquivo para construir um recordset hierárquico de dois níveis.
<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>
A seguir estão dois sub procedimentos do Visual Basic. O primeiro cria o Recordset e o passa para o subprocedimento WalkHier, que percorre recursivamente a hierarquia, escrevendo cada Field de cada registro em cada Recordset na janela de depuração.
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