Обзор простого поставщика Microsoft OLE DB
Microsoft OLE DB Simple Provider (OSP) позволяет ADO получать доступ к любым данным, для которых поставщик был написан с помощью набора средств простого поставщика OLE DB (OSP). Простые поставщики предназначены для доступа к источникам данных, которым требуется только базовая поддержка OLE DB, например массивы в памяти или XML-документы.
Параметры строки соединения
Чтобы подключиться к библиотеке DLL простого поставщика OLE DB, задайте для аргумента Provider значение свойства ConnectionString :
MSDAOSP
Это значение также можно задать или считывать с помощью свойства Provider .
Вы можете подключиться к простым поставщикам, зарегистрированным в качестве полных поставщиков 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-дереве в главы иерархического набора записей.
Используя эти встроенные эвристики, 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 DSO сопоставляет XML-элементы со строками и столбцами, преобразуются подэлементы, а не элемент верхнего уровня.
Xml DSO использует следующую процедуру для преобразования подэлементов:
Каждый вложенный элемент и атрибут соответствует столбцу в некоторой иерархии Recordset .
Имя столбца совпадает с именем подэлемента или атрибута, если родительский элемент не имеет атрибута и подэлемента с тем же именем. В этом случае к имени столбца подэлемента добавляется "!".
Каждый столбец представляет собой простой столбец, содержащий скалярные значения (обычно строки), или столбец Recordset , содержащий дочерние наборы записей.
Столбцы, соответствующие атрибутам, всегда просты.
Столбцы, соответствующие вложенным элементам, являются столбцами Recordset , если подэлемент имеет собственные подэлементы или атрибуты (или и то, и другое), или родительский элемент подэлемента имеет более одного экземпляра в качестве дочернего элемента. В противном случае столбец прост.
Если имеется несколько экземпляров подэлемента (в разных родительских элементах), его столбец является столбцом Recordset , если любой из экземпляров подразумевает столбец Recordset ; Его столбец является простым, только если все экземпляры подразумевают простой столбец.
Все наборы записей имеют дополнительный столбец с именем $Text.
Код, необходимый для создания набора записей , выглядит следующим образом:
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
Как только набор записей будет открыт, можно использовать обычные команды навигации ADO Recordset .
Наборы записей , созданные OSP, имеют несколько ограничений.
Клиентские курсоры (adUseClient) не поддерживаются.
Иерархические наборы записей, созданные в произвольном ФОРМАТЕ XML, невозможно сохранить с помощью Recordset.Save.
Наборы записей , созданные с помощью OSP, доступны только для чтения.
XMLDSO добавляет дополнительный столбец Data ($Text) к каждому набору записей в иерархии.
Дополнительные сведения о простом поставщике OLE DB см. в разделе Создание простого поставщика.
Пример кода
Следующий код Visual Basic демонстрирует открытие произвольного XML-файла, создание иерархического набора записей и рекурсивную запись каждой записи каждого набора записей в окно отладки.
Ниже приведен простой XML-файл, содержащий котировки акций. В следующем коде этот файл используется для создания двухуровневого иерархического набора записей.
<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
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру