使用 C# 将 .xmla 部署到 SQL



我现在在PowerShell中使用Invoke-ASCmd在SQL Server中创建一个数据库,如下所示:

Invoke-ascmd -Query $MyScript -Server $ASServer

其中$MyScript是一个字符串,其中包含我之前读过的 .xmla 文件的内容。

这很好用。现在我需要在 C# 中做类似的事情,但找不到像 PowerShell 中那样的简单解决方案。

我看到有些人使用名为 Microsoft.AnalysisServices.XMLA.dll 的Microsoft DLL,但它不受支持,并且有问题的类是"内部"的,所以我什至无法引用它。

我在搜索时Microsoft.AnalysisServices.AdomdClient.dll找到了这个 DLL,但没有看到任何与我需要的类相关:https://learn.microsoft.com/en-us/dotnet/api/microsoft.analysisservices.adomdclient?view=analysisservices-dotnet

using Microsoft.AnalysisServices.AdomdClient;
try
{
    var xmlaFileContents = File.ReadAllText("path/to/your/file.xmla");
    using (AdomdCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = xmlaFileContents;
        cmd.ExecuteNoQuery();
    }
}
catch(Exception)
{
}
**请注意

,我没有运行此代码**

由于 AdomdConnection 是从 IDbConnection 继承而来的,因此它与 SqlConnection 的工作方式非常相似,因此,可以使用类似的语法,正如@jogi向您展示的那样。

几年前,我编写了一个PS函数,我们在TFS构建中使用了该函数。它使用 .NET 程序集而不是 PS 层,所以我想既然你看起来很精通 PS,你也许可以从中得到一些东西。仍然与@jogi写的本质上相同,只是包裹在 PS 中。

function Invoke-XmlaScript {
[CmdletBinding()] param (
    [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$ServerInstance,
    [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$XmlaScript
)
process {
    $connection = New-Object Microsoft.AnalysisServices.AdomdClient.AdomdConnection("Data Source=$ServerInstance;Provider=MSOLAP.4;Integrated Security=SSPI;Impersonation Level=Impersonate;")
    $connection.Open()
    try {
        $command = $connection.CreateCommand()
        $command.CommandTimeout = 20000
        $command.CommandType = [System.Data.CommandType]::Text
        $command.CommandText = $Xmla
        $reader = $command.ExecuteXmlReader()
        if($reader.Read()) {
            Write-Output $reader.ReadOuterXml()
        }
    }
    catch { }
    $connection.Dispose()
}

}

相关内容

  • 没有找到相关文章

最新更新