Поделиться через


Миграция из ADO MD в ADOMD.NET

Библиотека ADOMD.NET похожа на библиотеку ADO MD, расширение библиотеки ActiveX Data Objects (ADO), которая в клиентских приложениях на основе COM используется для доступа к многомерным данным. 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.

    Используйте свойство Cubes объекта AdomdConnection.

  • Выполнение запросов и возвращение объектов набора ячеек

    ADO MD

    ADOMD.NET

    Используйте класс CellSet.

    Используйте класс AdomdCommand.

  • Доступ к метаданным, которые используются для отображения набора ячеек

    ADO MD

    ADOMD.NET

    Используйте класс Position.

    Используйте объекты Set и Tuple.

    ПримечаниеПримечание

    Класс Position поддерживается для обратной совместимости.

  • Извлечение метаданных модели интеллектуального анализа данных

    ADO MD

    ADOMD.NET

    Недоступно ни одного класса.

    Используйте одну из коллекций интеллектуального анализа данных:

    • Коллекция MiningModelCollection содержит список всех моделей интеллектуального анализа данных в источнике данных.

    • Коллекция MiningServiceCollection содержит сведения о доступных алгоритмах интеллектуального анализа данных.

    • Коллекция MiningStructureCollection предоставляет доступ к сведениям о структурах интеллектуального анализа данных на сервере.

Чтобы выделить эти различия, в следующем примере миграции сравниваются существующее приложение ADO MD с эквивалентным ему приложением ADOMD.NET.

Анализ примера миграции

И пример кода существующего приложения ADO MD, и его эквивалент ADOMD.NET, приведенные в этом разделе, выполняют одинаковый набор действий: создание соединения, выполнение инструкции MDX и извлечение метаданных и данных. Однако для выполнения этих задач два этих набора кода используют разные объекты.

Существующий код ADO MD

Следующий пример кода, взятый из документации по ADO MD 2.8, написан на языке Microsoft Visual Basic® 6.0, он использует ADO MD, чтобы продемонстрировать подключение к источнику данных Microsoft SQL Server и выполнение запроса к нему. В этом примере ADO MD используются следующие объекты:

  • Создает соединение с использованием объекта Catalog.

  • Выполняет инструкцию MDX при помощи объекта Cellset.

  • Получает метаданные и данные из объекта Position, возвращаемого объектом Cellset.

Private Sub cmdCellSettoDebugWindow_Click()Dim cat As New ADOMD.CatalogDim cst As New ADOMD.CellsetDim i As IntegerDim j As IntegerDim k As IntegerDim strServer As StringDim strSource As StringDim strColumnHeader As StringDim strRowText As StringOn Error GoTo Error_cmdCellSettoDebugWindow_ClickScreen.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 = vbDefaultExit SubError_cmdCellSettoDebugWindow_Click:   Beep   Screen.MousePointer = vbDefault   MsgBox "The following error has occurred:" & vbCrLf & _      Err.Description, vbCritical, " Error!"   Exit SubEnd Sub

Эквивалентный код ADOMD.NET

Следующий пример кода, написанный на языке Visual Basic .NET с использованием ADOMD.NET, демонстрирует выполнение таких же действий, которые выполняются в предыдущем примере на Visual Basic 6.0. Основная разница между приведенным далее примером и примером ADO MD, показанном ранее, заключается в том, какие объекты используются для выполнения действий. В примере ADOMD.NET используются следующие объекты:

  • Создает соединение с помощью объекта AdomdConnection.

  • Выполнение инструкции многомерных выражений при помощи объекта AdomdCommand.

  • Получает метаданные и данные из объекта Set, возвращаемого объектом 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 TryEnd Sub