Migrar de ADO MD a ADOMD.NET
La biblioteca de ADOMD.NET es similar a la biblioteca de ActiveX Data Objects Multidimensional (ADO MD), una extensión de la biblioteca de Objetos de datos ActiveX (ADO) que se utiliza para tener acceso a datos multidimensionales en aplicaciones cliente basadas en el Modelo de objetos componentes (COM). ADO MD proporciona un acceso fácil a los datos multidimensionales de lenguajes no administrados como C++ y Microsoft Visual Basic. ADOMD.NET proporciona un acceso fácil a los datos analíticos (tanto multidimensionales como de minería de datos) de lenguajes administrados como Microsoft C# y Microsoft Visual Basic .NET. Además, ADOMD.NET proporciona un modelo de objetos de metadatos mejorado.
Migrar las aplicaciones cliente existentes de ADO MD a ADOMD.NET resulta fácil, pero hay varias diferencias importantes con respecto a la migración:
Para proporcionar conectividad y acceso a datos a las aplicaciones cliente
ADO MD
ADOMD.NET
Requiere referencias a Adodb.dll y Adomd.dll.
Requiere una única referencia a Microsoft.AnalysisServices.AdomdClient.dll.
La clase AdomdConnection proporciona compatibilidad de conectividad, además de acceso a metadatos.
Para recuperar metadatos para objetos multidimensionales
ADO MD
ADOMD.NET
Utilice la clase Catalog.
Utilice la propiedad Cubes de AdomdConnection.
Para ejecutar consultas y devolver objetos cellset
ADO MD
ADOMD.NET
Utilice la clase CellSet.
Utilice la clase AdomdCommand.
Para tener acceso a los metadatos que se utilizan para mostrar un conjunto de celdas
[!NOTA]
La clase Position se admite para la compatibilidad con versiones anteriores.
Para recuperar metadatos del modelo de minería de datos
ADO MD
ADOMD.NET
No hay ninguna clase disponible.
Utilice una de las colecciones de minería de datos:
MiningModelCollection contiene una lista de cada modelo de minería de datos del origen de datos.
MiningServiceCollection proporciona información sobre los algoritmos de minería de datos disponibles.
MiningStructureCollection expone información sobre las estructuras de minería de datos del servidor.
Para resaltar estas diferencias, el ejemplo de migración siguiente compara una aplicación existente de ADO MD con una aplicación equivalente de ADOMD.NET.
Ejemplo de migración
Los ejemplos del código existente de ADO MD y el equivalente de ADOMD.NET que se muestran en esta sección realizan el mismo conjunto de acciones: crear una conexión, ejecutar una instrucción MDX (Expresiones multidimensionales) y recuperar metadatos y datos. Sin embargo, estos dos conjuntos de código no utilizan los mismos objetos para realizar dichas tareas.
Código existente de ADO MD
El ejemplo de código siguiente, extraído de la documentación de ADO MD 2.8, está escrito en Microsoft Visual Basic® 6.0 y utiliza ADO MD para mostrar cómo conectarse a un origen de datos de MicrosoftSQL Server y cómo consultarlo. En este ejemplo de ADO MD se utilizan los objetos siguientes:
Crea una conexión a partir de un objeto Catalog.
Ejecuta la instrucción MDX (Expresiones multidimensionales) mediante el objeto Cellset.
Recupera los metadatos y los datos del objeto Position, recuperado del objeto 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
Código de ADOMD.NET equivalente
En el ejemplo siguiente, escrito en Visual Basic .NET y en el que se utiliza ADOMD.NET, se muestra cómo realizar las mismas acciones que en el ejemplo anterior de Visual Basic 6.0. La diferencia principal entre el ejemplo siguiente y el ejemplo de ADO MD mostrado anteriormente son los objetos que se utilizan para realizar las acciones. En el ejemplo del ADOMD.NET se utilizan los objetos siguientes:
Crea una conexión con un objeto AdomdConnection.
Ejecuta la instrucción MDX mediante un objeto AdomdCommand.
Recupera los metadatos y los datos del objeto Set, recuperado del objeto 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