Migration d'ADO MD vers ADOMD.NET
La bibliothèque ADOMD.NET est semblable à la bibliothèque ADO MD (ActiveX Data Objects Multidimensional), extension de la bibliothèque ADO (ActiveX Data Objects) utilisée pour accéder aux données multidimensionnelles dans les applications clientes COM (Component Object Model). ADO MD facilite l'accès aux données multidimensionnelles à partir de langages non managés tels que C++ et Microsoft Visual Basic. ADOMD.NET facilite l'accès aux données analytiques (multidimensionnelles et d'exploration de données) à partir de langages managés tels que Microsoft C# et Microsoft Visual Basic .NET. En outre, ADOMD.NET fournit un modèle objet de métadonnées amélioré.
Il est simple de faire migrer des applications clientes existantes d'ADO MD vers ADOMD.NET, mais il existe plusieurs différences importantes sur le plan de la migration :
Pour fournir aux applications clientes une connectivité et un accès aux données
ADO MD
ADOMD.NET
Nécessite des références à Adodb.dll et Adomd.dll.
Nécessite une seule référence à Microsoft.AnalysisServices.AdomdClient.dll.
La classe AdomdConnection fournit une prise en charge de la connectivité, en plus de l'accès aux métadonnées.
Pour récupérer des métadonnées pour les objets multidimensionnels
ADO MD
ADOMD.NET
Utilise la classe Catalog.
Utilise la propriété Cubes de la classe AdomdConnection.
Pour exécuter des requêtes et retourner des objets d'ensemble de cellules
ADO MD
ADOMD.NET
Utilise la classe CellSet.
Utilise la classe AdomdCommand.
Pour accéder aux métadonnées utilisés pour afficher un ensemble de cellules
Notes
La classe Position est prise en charge pour des raisons de compatibilité descendante.
Pour récupérer des métadonnées de modèle d'exploration de données
ADO MD
ADOMD.NET
Aucune classe disponible.
Utilise l'une des collections d'exploration de données suivantes :
MiningModelCollection contient une liste de tous les modèles d'exploration de données de la source de données.
MiningServiceCollection fournit des informations sur les algorithmes d'exploration de données disponibles.
MiningStructureCollection expose des informations sur les structures d'exploration de données du serveur.
Pour mettre en évidence ces différences, l'exemple de migration suivant compare une application ADO MD existante à une application ADOMD.NET équivalente.
Exemple de migration
L'exemple de code ADO MD et sont équivalent ADOMD.NET présentés dans cette section exécutent les mêmes actions : création d'une connexion, exécution d'une instruction MDX (Multidimensional Expressions) et récupération de métadonnées et de données. Toutefois, ces deux ensembles de code n'utilisent pas les mêmes objets pour effectuer ces tâches.
Code ADO MD existant
L'exemple de code suivant, tiré de la documentation ADO MD 2.8, est écrit en langage Microsoft Visual Basic® 6.0 et utilise ADO MD pour montrer comment se connecter à une source de données Microsoft SQL Server et comment l'interroger. Cet exemple ADO MD utilise les objets suivants :
Crée une connexion à partir d'un objet Catalog.
Exécute l'instruction MDX (Multidimensional Expressions) par le biais de l'objet Cellset.
Récupère les métadonnées et les données à partir de l'objet Position, récupéré à partir de l'objet Cellset.
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
Code ADOMD.NET équivalent
L'exemple suivant, écrit en Visual Basic .NET et utilisant ADOMD.NET, montre comment effectuer les mêmes actions que l'exemple Visual Basic 6.0 précédent. La principale différence entre l'exemple suivant et l'exemple ADO MD présenté plus haut réside dans les objets utilisés pour effectuer les actions. L'exemple ADOMD.NET utilise les objets suivants :
Crée une connexion avec un objet AdomdConnection.
Exécute l'instruction MDX par le biais d'un objet AdomdCommand.
Récupère les métadonnées et les données à partir de l'objet Set, récupéré à partir de l'objet Cellset.
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