Microsoft OLE DB Simple Provider の概要
Microsoft OLE DB Simple Provider (OSP) を使用することで、OLE DB Simple Provider (OSP) Toolkitを用いて作成されたプロバイダー経由で、ADO がデータにアクセスすることが可能になります。 単純なプロバイダーは、インメモリ配列や XML ドキュメントなど、OLE DB の基本的なサポートのみを必要とするデータ ソースにアクセスすることを目的としています。
接続文字列パラメーター
OLE DB Simple Provider DLL に接続するには、Provider 引数を ConnectionString プロパティに設定します。
MSDAOSP
この値は、Provider プロパティを使用して設定または読み取ることもできます。
完全な OLE DB プロバイダーとして登録されている単純なプロバイダーに接続するには、プロバイダー ライターによって決定される登録済みのプロバイダー名を使用します。
一般的な接続文字列
このプロバイダーの一般的な接続文字列は次のとおりです。
"Provider=MSDAOSP;Data Source=serverName"
文字列は、次のキーワードで構成されます。
キーワード | 説明 |
---|---|
プロバイダー | SQL Server 用の OLE DB プロバイダーを指定します。 |
データ ソース | サーバーの名前を指定します。 |
XML ドキュメントの例
MDAC 2.7 以降の OLE DB Simple Provider (OSP) と Windows Data Access Components (Windows DAC) が拡張され、任意の XML ファイルに対して階層型 ADO Recordsets を開く機能がサポートされました。 これらの XML ファイルには ADO XML 永続化スキーマを含めることもできますが、必須ではありません。 これは、OSPを MSXML2.DLLに接続することによって実装されています。そのため、MSXML2.DLL 以降が必要です。
次の例で使用する portfolio.xml ファイルには、次のツリーが含まれています。
Portfolio
Stock
Shares
Symbol
Price
Info
Company Name
WebSite
XML DSO では、組み込みのヒューリスティックを使用して、XML ツリー内のノードを階層 Recordsetの章に変換します。
これらの組み込みのヒューリスティックを使用して、XML ツリーは、次の形式の 2 レベルの階層 Recordset に変換されます。
Parent Recordset
Shares, Symbol, Price, $Text
Child Recordset
Company Name, WebSite, $Text
[ポートフォリオ] タグと [情報] タグは、階層 Recordsetで表されないことに注意してください。 XML DSO が XML ツリーを階層 Recordsetsに変換する方法については、次の規則を参照してください。 $Text列については、次のセクションで説明します。
XML 要素と属性を列と行に割り当てる規則
XML DSO は、データ バインド アプリケーションの列と行に要素と属性を割り当てる手順に従います。 XML は、階層全体を含む 1 つのタグを持つツリーとしてモデル化されます。 たとえば、書籍の XML 記述には、章タグ、図タグ、セクション タグを含むことができます。 最上位レベルでは、サブ要素の章、図、およびセクションを含む書籍タグになります。 XML DSO が XML 要素を行と列にマップすると、最上位要素ではなくサブ要素が変換されます。
XML DSO では、次の手順を使用してサブ要素を変換します。
各サブ要素と属性は、階層内の一部の Recordset 内の列に対応します。
列の名前は、親要素に属性と同じ名前のサブ要素がない限り、サブ要素または属性の名前と同じです。その場合、サブ要素の列名の前に "!" が付加されます。
各列は、スカラー値 (通常は文字列) を含む 単純な 列か、子 Recordsetを含む Recordset 列です。
属性に対応する列は常に単純です。
サブ要素に対応する列は、サブ要素に独自のサブ要素や属性(またはその両方)がある場合や、サブ要素の親にそのサブ要素が子として複数回出現する場合、レコードセットの 列が に関連付けられます。 それ以外の場合、列は単純です。
サブ要素の複数のインスタンス (異なる親の下) がある場合、インスタンスの が 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
手記
データ ファイルのパスは、4 つの異なる名前付け規則を使用して指定できます。
'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 は、階層の各 Recordset にデータ ($Text) の列を追加します。
OLE DB Simple Provider の詳細については、「Simple Providerの構築」を参照してください。
コード例
次の Visual Basic コードは、任意の XML ファイルを開き、Recordset 階層構造を構築し、各 Recordset の各レコードをデバッグ ウィンドウに再帰的に書き込む方法を示しています。
株価情報を含む単純な XML ファイルを次に示します。 次のコードでは、このファイルを使用して、Recordset 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 の 2 つのサブ プロシージャを次に示します。 1 つ目は、Recordset を作成し、それを WalkHier サブ プロシージャに渡します。このプロシージャは、階層を再帰的に下に移動し、各 Recordset 内の各レコードの各 Field をデバッグ ウィンドウに書き込みます。
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