如何从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
相关产品推荐
相关产品推荐

