Visão geral do Provedor Microsoft OLE DB Simples
O OSP (Provedor OLE DB Simples) da Microsoft permite que o ADO acesse todos os dados para os quais um provedor foi gravado usando o Kit de Ferramentas OSP (Provedor OLE DB Simples). 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 OLE DB Simples, defina o argumento Provider para a propriedade ConnectionString como:
MSDAOSP
Esse valor também pode ser definido ou lido por meio da propriedade Provider.
Você pode se conectar a provedores simples que foram registrados como provedores OLE DB completos usando o nome do provedor registrado, determinado pelo gravador 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 nestas 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 OLE DB Simples) no MDAC 2.7 ou posterior e o Windows DAC (Windows Data Access Components) foram aprimorados para dar suporte à abertura de Recordsets ADO hierárquicos em arquivos XML arbitrários. Esses arquivos XML podem conter o esquema de persistência XML do ADO, mas não são obrigatórios. Isso foi implementado com a conexão do OSP ao MSXML2.DLL, ou seja, é necessário ,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ística interna para converter os nós de uma árvore XML em capítulos em um Recordset hierárquico.
Usando essas heurísticas internas, a árvore XML é convertida em um Recordset hierárquico de dois níveis do seguinte formulário:
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
Observe que as marcas de Portfólio e Informações não são representadas no Recordset hierárquico. Para obter uma explicação de como o DSO XML converte árvores XML em Recordsets hierárquicos, confira 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 toda a hierarquia. 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 a marca de livro, que contém 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; nesse caso, um "!" é acrescentado ao início do nome da coluna do subelemento.
Cada coluna é uma coluna Simple que contém valores escalares (geralmente cadeias de caracteres) ou uma coluna Recordset que contém Recordsets filho.
As colunas correspondentes aos atributos são sempre simples.
As colunas correspondentes a subelementos são colunas Recordset se o subelemento tem seus próprios subelementos ou atributos (ou ambos) ou o pai do subelemento tem mais de uma instância do subelemento como 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 alguma das instâncias implicar uma coluna Recordset; sua coluna é simples somente se todas as instâncias implicam uma coluna simples.
Todos os Recordsets têm uma coluna adicional chamada $Text.
O código necessário para construir um Recordset é 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
Observação
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 usuais do Recordset ADO poderão ser usados.
Os Recordsets gerados pelo OSP têm algumas limitações:
Não há suporte a cursores de cliente (adUseClient).
Os Recordsets hierárquicos criados por XML arbitrário não podem ser persistidos usando Recordset.Save.
Os Recordsets criados com o OSP são somente leitura.
O XMLDSO adiciona mais uma coluna de dados ($Text) a cada Recordset na hierarquia.
Para obter mais informações sobre o Provedor OLE DB Simples, confira 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 Recordset hierárquico e a gravação recursiva de cada registro de cada Recordset 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 subprocedimentos do Visual Basic. O primeiro cria o Recordset e o transmite ao subprocedimento WalkHier, que percorre recursivamente a hierarquia, gravando 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