1

xmla スクリプトを実行するためのツールまたは簡単な方法 (キューブの作成または削除の例) を探しています。以前はプログラムを使用してexeファイルを作成してInno Setupいましたが、コマンドラインと同じように別のexeファイルを実行できるコマンドを書くことができます。

ascmd.exe( Readme For Ascmd Command-line Utility Sample ) のようなツールがあることがわかりました。ただし、MS SQL の古いバージョンで使用されていました。MS SQL Server 2012 以降のバージョンには他に何かありますか?

ascmd.exeこのツールを入手できなかったため、ツールを使用していなかったと言えます (ここから C# でプロジェクトをコンパイルできませんでした: Readme For Ascmd Command-line Utility Sample )。

4

2 に答える 2

0

コマンドラインから実行できるC#で独自のexeファイルを作成しました。私のコードは、同様の問題を抱えている人に役立つかもしれません。:)

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;
}
于 2016-02-23T13:48:31.987 に答える