次の方法で共有


ADO MD から ADOMD.NET への移行

ADOMD.NET ライブラリは、ActiveX Data Objects (ADO) ライブラリを機能拡張した ActiveX Data Objects Multidimensional (ADO MD) ライブラリに似ています。このライブラリは、COM (Component Object Model) ベースのクライアント アプリケーションで多次元データへアクセスするときに使用されます。ADO MD を使用すると、C++ や Microsoft Visual Basic などのアンマネージ言語から多次元データへ簡単にアクセスできます。ADOMD.NET では、Microsoft C# や Microsoft Visual Basic .NET などのマネージ言語から、分析データ (多次元データとデータ マイニングの両方) へ簡単にアクセスできます。また、ADOMD.NET は、高度な機能を備えたメタデータ オブジェクト モデルでもあります。

既存のクライアント アプリケーションを ADO MD から ADOMD.NET へ移行するのは容易ですが、移行時には、次の重要な相違点に注意してください。

  • クライアント アプリケーションによる接続およびデータ アクセス

    ADO MD

    ADOMD.NET

    Adodb.dll と Adomd.dll を両方とも参照する必要があります。

    Microsoft.AnalysisServices.AdomdClient.dll への参照のみが必要です。

    AdomdConnection クラスは、メタデータへのアクセスだけでなく、接続のサポートも提供します。

  • 多次元オブジェクトのメタデータの取得

    ADO MD

    ADOMD.NET

    Catalog クラスを使用します。

    AdomdConnectionCubes プロパティを使用します。

  • クエリの実行およびセルセット オブジェクトの取得

    ADO MD

    ADOMD.NET

    CellSet クラスを使用します。

    AdomdCommand クラスを使用します。

  • セルセットの表示で使用するメタデータへのアクセス

    ADO MD

    ADOMD.NET

    Position クラスを使用します。

    Set オブジェクトおよび Tuple オブジェクトを使用します。

    注意

    Position クラスは、旧バージョンとの互換性を維持するためにサポートされています。

  • マイニング モデル メタデータの取得

    ADO MD

    ADOMD.NET

    使用できるクラスはありません。

    次のいずれかのデータ マイニング コレクションを使用します。

これらの違いをわかりやすく示すため、次の移行例では、既存の ADO MD アプリケーションと同等の ADOMD.NET アプリケーションを比較します。

移行例

この例に示す既存の ADO MD と同等の ADOMD.NET コードは、どちらも同じ一連の操作 (接続の作成、多次元式 (MDX) ステートメントの実行、メタデータとデータの取得) を実行します。ただし、これらの 2 つのコードは、これらのタスクの実行に異なるオブジェクトを使用します。

既存の ADO MD コード

ADO MD 2.8 ドキュメントから抜粋した次のコード例は、Microsoft Visual Basic® 6.0 で記述されており、ADO MD を使用して Microsoft SQL Server データ ソースへの接続およびクエリを行う方法を示しています。この ADO MD の例では、次のオブジェクトを使用します。

  • Catalog オブジェクトから接続を作成します。

  • Cellset オブジェクトを使用して多次元式 (MDX) ステートメントを実行します。

  • Cellset オブジェクトで取得した Position オブジェクトからメタデータとデータを取得します。

Private Sub cmdCellSettoDebugWindow_Click()
Dim cat As New ADOMD.Catalog
Dim cst As New ADOMD.Cellset
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim strServer As String
Dim strSource As String
Dim strColumnHeader As String
Dim strRowText As String

On Error GoTo Error_cmdCellSettoDebugWindow_Click
Screen.MousePointer = vbHourglass
'*-----------------------------------------------------------------------
'* Set server to local host.
'*-----------------------------------------------------------------------
    strServer = "LOCALHOST"

'*-----------------------------------------------------------------------
'* Set MDX query string source.
'*-----------------------------------------------------------------------
    strSource = strSource & "SELECT "
    strSource = strSource & "{[Measures].members} ON COLUMNS,"
    strSource = strSource & _
        "NON EMPTY [Store].[Store City].members ON ROWS"
    strSource = strSource & " FROM Sales"

'*-----------------------------------------------------------------------
'* Set active connection.
'*-----------------------------------------------------------------------
        cat.ActiveConnection = "Data Source=" & strServer & _
            ";Provider=msolap;"

'*-----------------------------------------------------------------------
'* Set cellset source to MDX query string.
'*-----------------------------------------------------------------------
        cst.Source = strSource

'*-----------------------------------------------------------------------
'* Set cellset active connection to current connection
'*-----------------------------------------------------------------------
    Set cst.ActiveConnection = cat.ActiveConnection

'*-----------------------------------------------------------------------
'* Open cellset.
'*-----------------------------------------------------------------------
    cst.Open

'*-----------------------------------------------------------------------
'* Allow space for row header text.
'*-----------------------------------------------------------------------
strColumnHeader = vbTab & vbTab & vbTab & vbTab & vbTab & vbTab

'*-----------------------------------------------------------------------
'* Loop through column headers.
'*-----------------------------------------------------------------------
       For i = 0 To cst.Axes(0).Positions.Count - 1
            strColumnHeader = strColumnHeader & _
                cst.Axes(0).Positions(i).Members(0).Caption & vbTab & _
                    vbTab & vbTab & vbTab
       Next
       Debug.Print vbTab & strColumnHeader & vbCrLf

'*-----------------------------------------------------------------------
'* Loop through row headers and provide data for each row.
'*-----------------------------------------------------------------------
        strRowText = ""
        For j = 0 To cst.Axes(1).Positions.Count - 1
            strRowText = strRowText & _
                cst.Axes(1).Positions(j).Members(0).Caption & vbTab & _
                    vbTab & vbTab & vbTab
            For k = 0 To cst.Axes(0).Positions.Count - 1
                strRowText = strRowText & cst(k, j).FormattedValue & _
                    vbTab & vbTab & vbTab & vbTab
            Next
            Debug.Print strRowText & vbCrLf
            strRowText = ""
        Next

    Screen.MousePointer = vbDefault
Exit Sub

Error_cmdCellSettoDebugWindow_Click:
   Beep
   Screen.MousePointer = vbDefault
   MsgBox "The following error has occurred:" & vbCrLf & _
      Err.Description, vbCritical, " Error!"
   Exit Sub
End Sub

同等の ADOMD.NET コード

Visual Basic.NET で記述され、ADOMD.NET を使用している次の例は、上記の Visual Basic 6.0 の例と同じ操作の実行方法を示しています。この例と前述の ADO MD の例との大きな違いは、操作のアクションの実行に使用するオブジェクトです。ADOMD.NET の例では、次のオブジェクトを使用します。

  • AdomdConnection オブジェクトから接続を作成します。

  • AdomdCommand オブジェクトを使用して MDX ステートメントを実行します。

  • Cellset オブジェクトで取得した Set オブジェクトからメタデータとデータを取得します。

Private Sub DisplayCellSetInOutputWindow()
    Dim conn As AdomdConnection
    Dim cmd As AdomdCommand
    Dim cst As CellSet
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim strServer As String = "LOCALHOST"
    Dim strSource As String = "SELECT [Measures].members ON COLUMNS, " & _
        "NON EMPTY [Store].[Store City].members ON ROWS FROM SALES"
    Dim strOutput As New System.IO.StringWriter

    '*-----------------------------------------------------------------------
    '* Open connection.
    '*-----------------------------------------------------------------------
    Try
        ' Create a new AdomdConnection object, providing the connection
        ' string.
        conn = New AdomdConnection("Data Source=" & strServer & _
        ";Provider=msolap;")
        ' Open the connection.
        conn.Open()
    Catch ex As Exception
        Throw New ApplicationException( _
            "An error occurred while connecting.")
    End Try

    Try
    '*-----------------------------------------------------------------------
    '* Open cellset.
    '*-----------------------------------------------------------------------
        ' Create a new AdomdCommand object, providing the MDX query string.
        cmd = New AdomdCommand(strSource, conn)
        ' Run the command and return a CellSet object.
        cst = cmd.ExecuteCellSet()

    '*-----------------------------------------------------------------------
    '* Concatenate output.
    '*-----------------------------------------------------------------------

    ' Include spacing to account for row headers.
    strOutput.Write(vbTab, 6)

    ' Iterate through the first axis of the CellSet object and
    ' retrieve column headers.
    For i = 0 To cst.Axes(0).Set.Tuples.Count - 1
        strOutput.Write(cst.Axes(0).Set.Tuples(i).Members(0).Caption)
        strOutput.Write(vbTab, 4)
    Next
    strOutput.WriteLine()

    ' Iterate through the second axis of the CellSet object and
    ' retrieve row headers and cell data.
    For j = 0 To cst.Axes(1).Set.Tuples.Count - 1
        ' Append the row header.
        strOutput.Write(cst.Axes(1).Set.Tuples(j).Members(0).Caption)
        strOutput.Write(vbTab, 4)

        ' Append the cell data for that row.
        For k = 0 To cst.Axes(0).Set.Tuples.Count - 1
            strOutput.Write(cst.Cells(k, j).FormattedValue)
            strOutput.Write(vbTab, 4)
        Next
        strOutput.WriteLine()
    Next

    ' Display the output.
    Debug.WriteLine(strOutput.ToString)

    '*-----------------------------------------------------------------------
    '* Release resources.
    '*-----------------------------------------------------------------------
        conn.Close()
    Catch ex As Exception
        ' Ignore or handle errors.
    Finally
        cst = Nothing
        cmd = Nothing
        conn = Nothing
    End Try
End Sub