Migrieren von ADO MD zu ADOMD.NET
Die ADOMD.NET-Bibliothek ist ähnlich wie die ADO MD-Bibliothek (ActiveX Data Objects Multidimensional) eine Erweiterung der ADO-Bibliothek (ActiveX Data Objects), die verwendet wird, um auf mehrdimensionale Daten in COM-basierten (Component Object Model) Clientanwendungen zuzugreifen. ADO MD bietet einen leichten Zugriff auf mehrdimensionale Daten aus nicht verwalteten Sprachen, wie C++ und Microsoft Visual Basic. ADOMD.NET bietet einen leichten Zugriff auf analytische (sowohl mehrdimensional als auch Data Mining) Daten aus verwalteten Sprachen, wie Microsoft C# und Microsoft Visual Basic .NET. Darüber hinaus stellt ADOMD.NET ein verbessertes Metadaten-Objektmodell bereit.
Die Migration bestehender Clientanwendungen von ADO MD auf ADOMD.NET ist leicht. Allerdings gibt es diverse wichtige Unterschiede in Bezug auf die Migration:
So stellen Sie Konnektivität und Datenzugriff für Clientanwendungen bereit
ADO MD
ADOMD.NET
Erfordert Verweise auf sowohl Adodb.dll als auch Adomd.dll.
Erfordert einen einzelnen Verweis auf Microsoft.AnalysisServices.AdomdClient.dll.
Zusätzlich zum Zugriff auf Metadaten stellt die AdomdConnection-Klasse Konnektivitätsunterstützung bereit.
So rufen Sie Metadaten für mehrdimensionale Objekte ab
ADO MD
ADOMD.NET
Verwenden Sie die Catalog-Klasse.
Verwenden Sie die Cubes-Eigenschaft von AdomdConnection.
So führen Sie Abfragen aus und geben Cellset-Objekte zurück
ADO MD
ADOMD.NET
Verwenden Sie die CellSet-Klasse.
Verwenden Sie die AdomdCommand-Klasse.
So greifen Sie auf die Metadaten zu, die verwendet werden, um ein Cellset anzuzeigen
Hinweis Die Position-Klasse wird aus Gründen der Abwärtskompatibilität unterstützt.
So rufen Sie Miningmodellmetadaten ab
ADO MD
ADOMD.NET
Keine Klasse verfügbar.
Verwenden Sie eine der Data Mining-Auflistungen:
MiningModelCollection enthält eine Liste aller Miningmodelle in der Datenquelle.
MiningServiceCollection stellt Informationen über die verfügbaren Mining-Algorithmen bereit.
MiningStructureCollection macht Informationen über die Mining-Strukturen auf dem Server verfügbar.
Um diese Unterschiede herauszustellen, vergleicht das folgende Migrationsbeispiel eine bestehende ADO MD-Anwendung mit einer entsprechenden ADOMD.NET-Anwendung.
Anschauen eines Migrationsbeispiels
Sowohl die vorhandenen ADO MD- als auch die entsprechenden ADOMD.NET-Codebeispiele, die in diesem Abschnitt angegeben sind, führen die gleichen Gruppen an Aktionen aus: Erstellen einer Verbindung, Ausführen einer MDX-Anweisung (Multidimensional Expressions) und Abrufen von Metadaten und Daten. Allerdings verwenden diese beiden Codesätze nicht die gleichen Objekte zur Ausführung dieser Tasks.
Vorhandener ADO MD-Code
Das folgende, aus der ADO MD 2.8-Dokumentation entliehene Codebeispiel ist in Microsoft Visual Basic® 6.0 geschrieben und verwendet ADO MD, um zu veranschaulichen, wie eine Verbindung zu einer Microsoft SQL Server-Datenquelle aufgebaut und wie diese abgefragt wird. Dieses ADO MD-Beispiel verwendet die folgenden Objekte:
Erstellt eine Verbindung aus einem Catalog-Objekt.
Führt die MDX-Anweisung (Multidimensional Expressions) mithilfe des Cellset-Objekts aus.
Ruft die Metadaten und Daten vom Position-Objekt ab, die vom Cellset-Objekt abgerufen werden.
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
Entsprechender ADOMD.NET-Code
Das folgende, in Visual Basic .NET und mittels ADOMD.NET geschriebene Beispiel veranschaulicht, wie die gleichen Aktionen ausgeführt werden wie bei dem zuvor genannten Visual Basic 6.0-Beispiel. Der Hauptunterschied zwischen dem folgenden Beispiel und dem zuvor genannten ADO MD-Beispiel liegt in den Objekten, die verwendet werden, um die Aktionen auszuführen. Das ADOMD.NET-Beispiel verwendet die folgenden Objekte:
Erstellt eine Verbindung mit einem AdomdConnection-Objekt.
Führt die MDX-Anweisung mithilfe eines AdomdCommand-Objekts aus.
Ruft die Metadaten und Daten vom Set-Objekt ab, die vom Cellset-Objekt abgerufen werden.
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