Обзор простого поставщика Microsoft OLE DB
Microsoft OLE DB Simple Provider (OSP) позволяет ADO получать доступ к любым данным, для которых поставщик был написан с помощью инструментария OLE DB Simple Provider (OSP). Простые поставщики предназначены для доступа к источникам данных, которые требуют только базовой поддержки OLE DB, например массивов в памяти или XML-документов.
Параметры строки подключения
Чтобы подключиться к библиотеке DLL OLE DB Simple Provider, установите значение аргумента Provider для свойства ConnectionString:
MSDAOSP
Это значение также можно задать или прочитать с помощью свойства поставщика.
Вы можете подключиться к простым поставщикам, зарегистрированным как полноценные поставщики OLE DB, используя зарегистрированное имя поставщика, определяемое разработчиком поставщика.
Типичная строка подключения
Типичная строка подключения для этого поставщика:
"Provider=MSDAOSP;Data Source=serverName"
Строка состоит из следующих ключевых слов:
Ключевое слово | Описание |
---|---|
поставщик | Указывает поставщик OLE DB для SQL Server. |
Источник данных | Указывает имя сервера. |
Пример XML-документа
Простой поставщик OLE DB (OSP) в MDAC 2.7 или более поздней версии и компоненты доступа к данным Windows (Windows DAC) были улучшены для поддержки открытия иерархических наборов записей ADO по произвольным XML-файлам. Эти XML-файлы могут содержать схему сохраняемости ADO XML, но она не требуется. Это было реализовано путем подключения OSP к MSXML2.DLL; поэтому требуется MSXML2.DLL или более поздней версии.
Файл portfolio.xml, используемый в следующем примере, содержит следующее дерево:
Portfolio
Stock
Shares
Symbol
Price
Info
Company Name
WebSite
XML DSO использует встроенные эвристики для преобразования узлов XML-дерева в главы иерархической Recordset.
Используя эти встроенные эвристики, дерево XML преобразуется в двухуровневую иерархическую Набор записей следующей формы:
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
Обратите внимание, что теги Portfolio и Info не представлены в иерархическом наборе записей . Для объяснения того, как XML DSO преобразует XML-деревья в иерархические наборы записей , см. следующие правила. Столбец $Text рассматривается в следующем разделе.
Правила назначения XML-элементов и атрибутов столбцам и строкам
Xml DSO следует процедуре назначения элементов и атрибутов столбцам и строкам в приложениях, привязанных к данным. XML моделиируется как дерево с одним тегом, содержащим всю иерархию. Например, XML-описание книги может содержать теги глав, теги фигуры и теги разделов. На самом высоком уровне будет тег книги, содержащий подэлементы: глава, рисунок и раздел. При сопоставлении элементов XML c строками и столбцами с помощью DSO преобразуются вложенные элементы, а не элемент верхнего уровня.
Xml DSO использует эту процедуру для преобразования подэлементов:
Каждый подэлемент и атрибут соответствуют столбцу в неком Recordset в иерархии.
Имя столбца совпадает с именем подэлемента или атрибута, если только родительский элемент не имеет атрибута и подэлемента с тем же именем; в этом случае "!" добавляется к имени столбца подэлемента.
Каждый столбец — это простой столбец, содержащий скалярные значения (обычно строки) или столбец Recordset, содержащий дочерние наборы записей.
Столбцы, соответствующие атрибутам, всегда просты.
Столбцы, которые соответствуют подэлементам, являются столбцами набора записей , если подэлемент имеет собственные подэлементы или атрибуты (или оба), или родительский элемент подэлемента имеет несколько экземпляров подэлемента в качестве дочернего элемента. В противном случае столбец прост.
При наличии нескольких экземпляров подэлемента (в разных родителях) его столбец представляет собой столбец набора записей, если любой экземпляров означает столбец Набор записей; его столбец прост, только если все экземпляры подразумевают простой столбец.
Все наборы записей имеют дополнительный столбец с именем $Text.
Код, необходимый для создания набора записей Recordset, выглядит так:
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
Заметка
Путь к файлу данных можно указать с помощью четырех разных соглашений об именовании.
'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
Как только Recordset открыт, можно использовать обычные команды навигации для ADO Recordset.
наборы записей, созданные OSP, имеют несколько ограничений:
Клиентские курсоры (adUseClient) не поддерживаются.
Иерархические наборы записей, созданные на основе произвольного XML, не могут сохраняться с помощью Recordset.Save.
наборы записей, созданные с помощью OSP, доступны только для чтения.
XMLDSO добавляет дополнительный столбец данных ($Text) к каждому recordset в иерархии.
Дополнительные сведения о простом поставщике OLE DB см. в разделе «Создание простого поставщика».
Пример кода
В следующем коде на Visual Basic показано открытие произвольного XML-файла, создание иерархического набора записейи рекурсивная запись каждой записи из каждого набора записей в окно отладки.
Вот простой XML-файл, содержащий котировки акций. Следующий код использует этот файл для создания двухуровневой иерархической Recordset.
<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>
Ниже приведены две подпрограммы Visual Basic. Первый создает набор записей и передает его в подпроцедуру WalkHier, которая рекурсивно проходит по иерархии, записывая каждое поле в каждой записи в каждом наборе записей в окно отладки.
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