Миграция из 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.
Доступ к метаданным, которые используются для отображения набора ячеек
Примечание Класс 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, чтобы продемонстрировать подключение к источнику данных MicrosoftSQL 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