次の方法で共有


Microsoft OLE DB Simple Provider の概要

Microsoft OLE DB Simple Provider (OSP) を使用すると、OLE DB Simple Provider (OSP) Toolkit を使用してプロバイダーが書き込まれたデータに ADO でアクセスできます。 Simple Provider は、メモリ内配列や XML ドキュメントなど、OLE DB の基本的なサポートのみを必要とするデータ ソースにアクセスすることを目的としています。

接続文字列パラメーター

OLE DB Simple Provider DLL に接続するには、ConnectionString プロパティの Provider 引数を次のように設定します。

MSDAOSP

Provider プロパティを使って、この値の設定または読み取りを行うこともできます。

プロバイダー ライターによって決定される登録済みのプロバイダー名を使用して、完全な OLE DB プロバイダーとして登録されている Simple Provider に接続できます。

一般的な接続文字列

このプロバイダーの一般的な接続文字列は次のとおりです。

"Provider=MSDAOSP;Data Source=serverName"

この文字列は次のキーワードで構成されます。

キーワード 説明
プロバイダー OLE DB Provider for SQL Server を指定します。
データ ソース サーバーの名前を指定します。

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

Portfolio および Info タグは階層 Recordset で表されないことに注意してください。 XML DSO が XML ツリーを階層 Recordsets に変換する方法の詳細については、次の規則を参照してください。 $Text 列については、次のセクションで説明します。

XML 要素と属性を列と行に割り当てる規則

XML DSO は、データ バインド アプリケーションで列と行に要素と属性を割り当てる手順に従います。 XML は、階層全体を含む 1 つのタグを持つツリーとしてモデル化されます。 たとえば、書籍の XML 記述には、チャプター タグ、図タグ、セクション タグを含めることができます。 最上位レベルは、サブ要素のチャプター、図、セクションが含まれた書籍タグになります。 XML DSO が XML 要素を行と列にマップする際には、最上位要素ではなくサブ要素が変換されます。

XML DSO では、サブ要素を変換するために次の手順を使用します。

  • 各サブ要素と属性は、階層内の一部の Recordset の列に対応します。

  • 列の名前は、親要素に同じ名前の属性およびサブ要素がない限り、サブ要素または属性の名前と同じです。あった場合は、サブ要素の列名の前に "!" が付加されます。

  • 各列は、スカラー値 (通常は文字列) を含む "単純な" 列か、子 Recordsets を含む Recordset 列です。

  • 属性に対応する列は常に単純な列です。

  • サブ要素に対応する列は、サブ要素に独自のサブ要素または属性 (またはその両方) がある場合、またはサブ要素の親に子としてサブ要素の複数のインスタンスがある場合は、Recordset 列です。 それ以外の場合、列は単純な列になります。

  • サブ要素の複数のインスタンス (異なる親の下) がある場合、インスタンスの "いずれか" が Recordset 列を示す場合、その列は Recordset 列になります。その列は "すべての" インスタンスが単純な列を示す場合にのみ単純な列になります。

  • すべての Recordsets には、$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 によって生成される Recordsets には、いくつかの制限があります。

  • クライアント カーソル (adUseClient) はサポートされていません。

  • 任意 の XML に対して作成された階層 Recordsets は、Recordset.Save を使用して永続化できません。

  • OSP で作成された Recordsets は読み取り専用です。

  • XMLDSO は、階層の各 Recordset に追加のデータ列 ($Text) を加えます。

OLE DB Simple Provider の詳細については、Simple Provider のビルドに関する記事を参照してください。

コード例

次の Visual Basic コードは、任意の XML ファイルを開き、階層 Recordset を構築し、各 Recordset の各レコードをデバッグ ウィンドウに再帰的に書き込む方法を示しています。

株価情報を含む単純な XML ファイルを次に示します。 次のコードでは、このファイルを使用して 2 レベルの階層 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 の 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