Запуск xmla-файла (службы Analysis Services) из командной строки

Я ищу инструмент или простой способ запустить скрипт xmla (пример для создания или удаления куба). Раньше я создавал exe-файл с помощью программы Inno Setup, и там я могу написать команду, которая может запускать другой exe-файл, как в командной строке.

Я обнаружил, что есть такой инструмент, как ascmd.exe (Readme Пример утилиты командной строки Ascmd). Но он использовался в более старых версиях MS SQL. Есть ли другие для MS SQL Server 2012 и более новых версий?

Я могу сказать, что не использовал инструмент ascmd.exe, потому что не смог получить этот инструмент (я не смог скомпилировать проект на C# отсюда: Readme для примера утилиты командной строки Ascmd).


person Monic    schedule 21.10.2015    source источник


Ответы (2)



Я написал свой собственный исполняемый файл на C#, который я могу запустить из командной строки. Возможно, мой код поможет кому-то с похожей проблемой. :)

using Microsoft.AnalysisServices;

string cubeServerName = args[1];    
string cubeName = args[2];  

Server server = null;
try
{
    server = new Server();
    server.Connect("Data source=" + cubeServerName + ";Timeout=7200000;Integrated Security=SSPI;");
}
catch (Exception e)
{
    return (int)ExitCode.UnknownError;
}

string sqlServerName = args[3]; 
string user = args[4];
string pass = args[5];
string path = args[6];

string xmlaScript = "";
try
{
    xmlaScript = System.IO.File.ReadAllText(@path);
}
catch (Exception e)
{
    return (int)ExitCode.InvalidFilename;
}

if (server != null)
{
    try
    {
        int exitCode = 0;
        if (xmlaScript != "")
            exitCode = ServerExecute(server, xmlaScript);
        server.Disconnect();
        return exitCode;
    }
    catch (Exception e)
    {
        return (int)ExitCode.UnknownError;
    }
}

//...

private static int ServerExecute(Server server, string command)
{
    XmlaResultCollection results = server.Execute(command);

    foreach (XmlaResult result in results)
    {
        foreach (XmlaMessage message in result.Messages)
        {
            if (message is XmlaError)
            {
                Console.WriteLine("ERROR: {0}", message.Description);
                return (int)ExitCode.UnknownError;
            }
            else
            {
                System.Diagnostics.Debug.Assert(message is XmlaWarning);
                Console.WriteLine("WARNING: {0}", message.Description);
            }
        }
    }
    return (int)ExitCode.Success;
}
person Monic    schedule 23.02.2016
comment
какой dll или пакет NuGet вы использовали для своего кода C#? Какие пространства имен вы указали? В каком пространстве имен находится этот класс Server? - person RBT; 10.07.2017
comment
@RBT Похоже, они находятся в Microsoft.AnalysisServices.Core.dll или Microsoft.AnalysisServices.dll, которые находятся в GAC. Подробности здесь: msdn.microsoft.com/en-us/library/< /а> - person DarcyThomas; 21.09.2017