Microsoft OLE DB 단순 공급자 개요
Microsoft OSP(OLE DB 단순 공급자)를 사용하면 ADO가 OSP(OLE DB 단순 공급자) 도구 키트를 사용하여 공급자에게 작성된 모든 데이터에 액세스할 수 있습니다. 단순 공급자는 메모리 내 배열 또는 XML 문서와 같은 기본 OLE DB 지원만 필요한 데이터 원본에 액세스하기 위한 것입니다.
연결 문자열 매개 변수
OLE DB 단순 공급자 DLL에 연결하려면 Provider 인수를 ConnectionString 속성으로 설정합니다.
MSDAOSP
이 값은 Provider 속성을 사용하여 설정하거나 읽을 수도 있습니다.
공급자 작성기에 의해 결정된 등록된 공급자 이름을 사용하여 전체 OLE DB 공급자로 등록된 단순 공급자에 연결할 수 있습니다.
일반적인 연결 문자열
이 공급자의 일반적인 연결 문자열은 다음과 같습니다.
"Provider=MSDAOSP;Data Source=serverName"
문자열은 다음 키워드로 구성됩니다.
키워드 | 설명 |
---|---|
공급자 | SQL Server용 OLE DB 공급자를 지정합니다. |
데이터 원본 | 서버의 이름을 지정합니다. |
XML 문서 예제
MDAC 2.7 이상 및 Windows DAC(Windows Data Access Components)의 OSP(OLE DB 단순 공급자)가 임의 XML 파일에 대해 계층적 ADO 레코드 집합 열기를 지원하도록 향상되었습니다. 이러한 XML 파일에는 ADO XML 지속성 스키마가 포함될 수 있지만 필수는 아닙니다. 이는 OSP를 MSXML2.DLL연결하여 구현되었습니다. 따라서 MSXML2.DLL 이상이 필요합니다.
다음 예제에서 사용되는 portfolio.xml 파일에는 다음 트리가 포함되어 있습니다.
Portfolio
Stock
Shares
Symbol
Price
Info
Company Name
WebSite
XML DSO는 기본 제공 추론을 사용하여 XML 트리의 노드를 계층적 레코드 집합의 챕터로 변환합니다.
이러한 기본 제공 추론을 사용하여 XML 트리는 다음 형식의 2단계 계층적 레코드 집합으로 변환됩니다.
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
포트폴리오 및 정보 태그는 계층적 레코드 집합에 표시되지 않습니다. XML DSO가 XML 트리를 계층적 레코드 집합으로 변환하는 방법에 대한 설명은 다음 규칙을 참조하세요. $Text 열은 다음 섹션에서 설명합니다.
열 및 행에 XML 요소 및 특성을 할당하기 위한 규칙
XML DSO는 데이터 바인딩된 애플리케이션의 열 및 행에 요소 및 특성을 할당하는 절차를 따릅니다. XML은 전체 계층 구조가 포함된 하나의 태그가 있는 트리로 모델링됩니다. 예를 들어 도서의 XML 설명에는 장 태그, 그림 태그 및 섹션 태그가 포함될 수 있습니다. 최상위 수준은 장, 그림 및 섹션 하위 요소를 포함하는 도서 태그입니다. XML DSO가 XML 요소를 행 및 열에 매핑하면 최상위 요소가 아닌 하위 요소가 변환됩니다.
XML DSO는 하위 요소 변환에 다음 절차를 사용합니다.
각 하위 요소 및 특성은 계층 구조의 일부 레코드 집합에 있는 열에 해당합니다.
부모 요소에 동일한 이름의 특성과 하위 요소가 없는 한 열의 이름은 하위 요소 또는 특성의 이름과 동일합니다. 부모 요소에 동일한 이름의 특성과 하위 요소가 있는 경우 하위 요소의 열 이름 앞에 "!"가 추가됩니다.
각 열은 스칼라 값(일반적으로 문자열)이 포함된 단순 열이거나 자식 레코드 집합이 포함된 레코드 집합 열입니다.
특성에 해당하는 열은 항상 단순합니다.
하위 요소에 해당하는 열은 하위 요소에 자체 하위 요소 또는 특성(또는 둘 다)이 있거나 하위 요소의 부모에 자식으로 하위 요소의 인스턴스가 둘 이상 있는 경우 레코드 집합 열입니다. 그렇지 않은 경우 이 열은 단순합니다.
하위 요소의 인스턴스가 여러 개 있는 경우(서로 다른 부모 아래) 인스턴스 중 하나라도레코드 집합 열을 의미하는 경우 해당 열은 레코드 집합 열입니다. 모든 인스턴스가 단순 열을 의미하는 경우에만 해당 열이 단순합니다.
모든 레코드 집합에는 $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 레코드 집합 탐색 명령을 사용할 수 있습니다.
OSP에서 생성한 레코드 집합에는 몇 가지 제한 사항이 있습니다.
클라이언트 커서(adUseClient)가 지원되지 않습니다.
임의 XML을 통해 만든 계층적 레코드 집합은 Recordset.Save를 사용하여 유지할 수 없습니다.
OSP를 사용하여 만든 레코드 집합은 읽기 전용입니다.
XMLDSO는 계층 구조의 각 레코드 집합에 추가 데이터 열($Text)을 추가합니다.
OLE DB 단순 공급자에 대한 자세한 내용은 단순 공급자 빌드를 참조하세요.
코드 예
다음 Visual Basic 코드에서는 임의 XML 파일을 열고, 계층적 레코드 집합을 생성하고, 각 레코드 집합의 각 레코드를 디버그 창에 재귀적으로 쓰는 방법을 보여 줍니다.
다음은 주식 호가가 포함된 간단한 XML 파일입니다. 다음 코드는 이 파일을 사용하여 2단계 계층적 레코드 집합을 생성합니다.
<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