You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从C#连接Azure Analysis Services?求可用示例及报错解决

我太懂这种找不到针对性资料的痛苦了——Azure Analysis Services(AAS)的C#开发资源确实远不如SSAS普及,而且空引用错误往往藏在细节里。下面给你一套适配AAS的完整C#连接和查询示例,再说说怎么避免你遇到的那个问题:

C#连接Azure Analysis Services并查询数据示例

首先,你需要安装官方的NuGet包,这是操作AAS的核心依赖:

# 使用NuGet包管理器控制台
Install-Package Microsoft.AnalysisServices.AdomdClient

# 或者用.NET CLI
dotnet add package Microsoft.AnalysisServices.AdomdClient

完整代码示例

这个示例包含了连接、查询、结果读取,以及针对空引用的防护:

using Microsoft.AnalysisServices.AdomdClient;
using System;

class AasDataQuery
{
    static void Main()
    {
        // 替换成你的AAS服务器地址,格式是 asazure://<区域>.asazure.windows.net/<服务器名>
        string aasServer = "asazure://eastus.asazure.windows.net/MyAasServer";
        // 替换成你的AAS模型/数据库名称
        string aasDatabase = "MySalesModel";
        // 你的DAX查询语句,这里以获取产品名称为例
        string daxQuery = "EVALUATE VALUES (DimProduct[ProductName])";

        // 构建连接字符串(这里用Windows集成认证,适合本地开发)
        string connectionString = $"Data Source={aasServer};Initial Catalog={aasDatabase};Integrated Security=SSPI;";

        try
        {
            using (AdomdConnection connection = new AdomdConnection(connectionString))
            {
                connection.Open();
                Console.WriteLine("成功连接到AAS服务器");

                using (AdomdCommand queryCommand = new AdomdCommand(daxQuery, connection))
                {
                    using (AdomdDataReader resultReader = queryCommand.ExecuteReader())
                    {
                        // 读取结果时必须检查是否为DBNull,避免空引用
                        while (resultReader.Read())
                        {
                            string productName = resultReader.IsDBNull(0) 
                                ? "未命名产品" 
                                : resultReader.GetString(0);
                            Console.WriteLine($"产品名称:{productName}");
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"查询出错:{ex.Message}");
            if (ex is NullReferenceException)
            {
                Console.WriteLine("可能的原因:");
                Console.WriteLine("- 服务器地址/数据库名称拼写错误");
                Console.WriteLine("- 连接未成功建立就执行了查询");
                Console.WriteLine("- 查询的字段在模型中不存在");
                Console.WriteLine("- 当前账号没有AAS模型的读取权限");
            }
        }
    }
}

关键注意事项(避免空引用错误)

  • 连接字符串正确性:AAS的服务器地址格式是asazure://<region>.asazure.windows.net/<servername>,和SSAS的localhost或域名格式完全不同,别搞混了。如果用服务Principal认证,连接字符串要改成:
    Data Source={aasServer};Initial Catalog={aasDatabase};User ID=app:{客户端ID}@{租户ID};Password={客户端密钥};Provider=MSOLAP;
    
  • 空引用预防:读取数据时一定要用resultReader.IsDBNull()验证字段值,不能直接resultReader.GetString(0)——如果字段是null,直接读取就会触发你遇到的空引用异常。另外要确保connection.Open()成功后再执行命令。
  • 权限验证:确保运行代码的账号(或服务Principal)被添加到AAS模型的Reader角色里,没有权限的话,连接可能失败或返回空结果,间接引发空引用。

其实很多SSAS的基础操作逻辑可以复用,但AAS的核心差异在连接地址和认证方式,上面的示例完全适配AAS场景,你可以直接替换参数测试。

内容的提问来源于stack exchange,提问作者user3268044

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:32:08