Visión general del Proveedor Simple de Microsoft OLE DB
El proveedor simple de Microsoft OLE DB (OSP) permite a ADO acceder a cualquier dato para el que se haya escrito un proveedor utilizando el Toolkit de OLE DB Simple Provider (OSP) . Los proveedores simples están diseñados para acceder a orígenes de datos que solo requieren compatibilidad fundamental con OLE DB, como matrices en memoria o documentos XML.
Parámetros de cadena de conexión
Para conectarse a la DLL del proveedor simple de OLE DB, establezca el argumento Provider en la propiedad ConnectionString en:
MSDAOSP
Este valor también se puede establecer o leer mediante la propiedad Proveedor de.
Puede conectarse a proveedores simples que se han registrado como proveedores OLE DB completos mediante el nombre del proveedor registrado, determinado por el escritor de proveedores.
Cadena de conexión típica
Una cadena de conexión típica para este proveedor es:
"Provider=MSDAOSP;Data Source=serverName"
La cadena consta de estas palabras clave:
Palabra clave | Descripción |
---|---|
proveedor de | Especifica el proveedor OLE DB para SQL Server. |
Fuente de datos | Especifica el nombre de un servidor. |
Ejemplo de documento XML
El proveedor simple de OLE DB (OSP) en MDAC 2.7 o posterior y los componentes de acceso a datos de Windows (Windows DAC) se ha mejorado para admitir la apertura de conjuntos de registros jerárquicos de ADO en archivos XML arbitrarios. Estos archivos XML pueden contener el esquema de persistencia XML de ADO, pero no es necesario. Esto se ha implementado conectando el OSP a la MSXML2.DLL; por lo tanto, se requiere MSXML2.DLL o posterior.
El archivo portfolio.xml usado en el ejemplo siguiente contiene el árbol siguiente:
Portfolio
Stock
Shares
Symbol
Price
Info
Company Name
WebSite
El DSO XML utiliza heurísticas integradas para convertir los nodos de un árbol XML en capítulos de un conjunto de registros jerárquico .
Con estas heurística integradas, el árbol XML se convierte en un recordset jerárquico de dos niveles de la forma siguiente:
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
Tenga en cuenta que las etiquetas Portfolio e Info no están representadas en el conjunto de registros jerárquico . Para obtener una explicación de cómo el DSO XML convierte árboles XML en Recordsets jerárquicos, consulte las siguientes reglas. La columna $Text se describe en la sección siguiente.
Reglas para asignar atributos y elementos XML a columnas y filas
El DSO XML sigue un procedimiento para asignar elementos y atributos a columnas y filas en aplicaciones enlazadas a datos. XML se modela como un árbol con una etiqueta que contiene toda la jerarquía. Por ejemplo, una descripción XML de un libro podría contener etiquetas de capítulo, etiquetas de figura y etiquetas de sección. En el nivel más alto estaría la etiqueta del libro, que contiene los subelementos capítulo, figura y sección. Cuando el DSO XML asigna elementos XML a filas y columnas, se convierten los subelementos, no el elemento de nivel superior.
El DSO XML usa este procedimiento para convertir los subelementos:
Cada subelemento y atributo corresponde a una columna en algún Recordset de la jerarquía.
El nombre de la columna es el mismo que el nombre del subelemento o atributo, a menos que el elemento primario tenga un atributo y un subelemento con el mismo nombre, en cuyo caso se antepone un "!" al nombre de la columna del subelemento.
Cada columna es una columna simple que contiene valores escalares (normalmente cadenas) o una columna de conjunto de registros que contiene conjuntos de registros secundarios .
Las columnas correspondientes a los atributos siempre son sencillas.
Las columnas correspondientes a los subelementos son columnas Recordset si el subelemento tiene sus propios subelementos o atributos (o ambos), o si el elemento primario del subelemento tiene más de una instancia del subelemento como elemento secundario. De lo contrario, la columna es sencilla.
Cuando hay varias instancias de un subelemento (en distintos elementos primarios), su columna es una columna Recordset si cualquier de las instancias implica una columna Recordset; su columna solo es sencilla si todas las instancias de implican una columna simple.
Todos los conjuntos de registros de tienen una columna adicional denominada $Text.
El código necesario para construir un recordset de es el siguiente:
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
La ruta de acceso del archivo de datos se puede especificar mediante cuatro convenciones 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
Tan pronto como se haya abierto el Recordset , se pueden usar los comandos habituales de navegación ADO Recordset.
Recordsets generados por el OSP tienen algunas limitaciones:
No se admiten cursores de cliente (adUseClient).
Los conjuntos de registros jerárquicos creados a través de XML arbitrario no pueden ser guardados mediante Recordset.Save.
Conjuntos de registros creados con el OSP son de solo lectura.
XmlDSO agrega una columna adicional de Datos ($Text) a cada conjunto de registros en la jerarquía.
Para obtener más información sobre el proveedor simple de OLE DB, vea Building a Simple Provider.
Ejemplo de código
En el siguiente código de Visual Basic se muestra cómo abrir un archivo XML arbitrario, construir un recordset jerárquicoy escribir de forma recursiva cada registro de cada recordset en la ventana de depuración.
Este es un archivo XML simple que contiene cotizaciones de acciones. El código siguiente usa este archivo para construir un conjunto de registros jerárquico de dos niveles .
<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 continuación se muestran dos subprocesos de Visual Basic. El primero crea el Recordset y lo pasa al subproceso WalkHier , que recorre de forma recursiva la jerarquía, escribiendo cada Campo en cada registro de cada Recordset en la ventana de depuración.
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