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 クラスを使用します。
AdomdConnection の Cubes プロパティを使用します。
クエリの実行およびセルセット オブジェクトの取得
ADO MD
ADOMD.NET
CellSet クラスを使用します。
AdomdCommand クラスを使用します。
セルセットの表示で使用するメタデータへのアクセス
注意 Position クラスは、旧バージョンとの互換性を維持するためにサポートされています。
マイニング モデル メタデータの取得
ADO MD
ADOMD.NET
使用できるクラスはありません。
次のいずれかのデータ マイニング コレクションを使用します。
MiningModelCollection には、データ ソース内のマイニング モデルの一覧が含まれています。
MiningServiceCollection は、使用可能なマイニング アルゴリズムに関する情報を提供します。
MiningStructureCollection は、サーバーのマイニング構造に関する情報を示します。
これらの違いをわかりやすく示すため、次の移行例では、既存の ADO MD アプリケーションと同等の ADOMD.NET アプリケーションを比較します。
移行例
この例に示す既存の ADO MD と同等の ADOMD.NET コードは、どちらも同じ一連の操作 (接続の作成、多次元式 (MDX) ステートメントの実行、メタデータとデータの取得) を実行します。ただし、これらの 2 つのコードは、これらのタスクの実行に異なるオブジェクトを使用します。
既存の ADO MD コード
ADO MD 2.8 ドキュメントから抜粋した次のコード例は、Microsoft Visual Basic® 6.0 で記述されており、ADO MD を使用して MicrosoftSQL 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