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

调用PowerBI API更新数据集服务器地址报连接详情含参数错误求助

Power BI 数据集更新数据源服务器配置报错解决方案

错误根因排查

首先确认两个前置限制,满足任意一种都会触发你收到的报错:

  • 你的数据集使用了Power Query参数来配置服务器、数据库地址,UpdateDatasources接口本身不支持修改参数化的数据源,需要先调用更新数据集参数接口更新参数值
  • 你的数据集为Live Connection连接Analysis Services、或者复合模型跨多个网关场景,不支持该接口修改数据源

排除上述限制后,你两种方案的代码存在如下问题:

  • 方案1的SDK代码错误将新连接信息传入了DatasourceSelector字段,旧连接信息传入了更新目标字段,字段逻辑完全倒置,导致接口无法匹配到现有数据源触发报错
  • 方案2的请求体结构符合接口要求,如果仍然报错,说明你大概率命中了上述前置限制,或者请求的权限范围不足

修正后的实现方案

方案1:Microsoft.PowerBI.Api.V2 库修正代码

public static void UpdateSqlDatabaseConnectionString(string WorkspaceId, string DatasetId, string Server, string Database)
{
    var tokenCredentials = GetTokenCredentials();
    using (var pbiClient = new PowerBIClient(new Uri(ApiUrl), tokenCredentials.Item1))
    {
        Datasource targetDatasource = pbiClient.Datasets.GetDatasourcesInGroup(WorkspaceId, DatasetId).Value.First();
        string currentServer = targetDatasource.ConnectionDetails.Server;
        string currentDatabase = targetDatasource.ConnectionDetails.Database;
        if (Server.ToLower().Equals(currentServer.ToLower()) && Database.ToLower().Equals(currentDatabase.ToLower()))
        {
            Console.WriteLine("New server and database name are the same as the old names");
            return;
        }
        // 构造选择器:仅传入现有数据源的标识信息
        var datasourceSelector = new Datasource()
        {
            DatasourceType = "Sql",
            ConnectionDetails = new DatasourceConnectionDetails()
            {
                Server = currentServer,
                Database = currentDatabase
            }
        };
        // 构造新的连接信息
        var newConnectionDetails = new DatasourceConnectionDetails
        {
            Database = Database,
            Server = Server
        };
        var updateConnRequest = new UpdateDatasourceConnectionRequest
        {
            DatasourceSelector = datasourceSelector,
            ConnectionDetails = newConnectionDetails
        };
        var updateDatasourcesRequest = new UpdateDatasourcesRequest(updateConnRequest);
        pbiClient.Datasets.UpdateDatasourcesInGroup(WorkspaceId, DatasetId, updateDatasourcesRequest);
    }
}

如果仍然报错,可将选择器替换为数据源ID+网关ID的形式,跳过连接详情参数校验:

var datasourceSelector = new Datasource()
{
    DatasourceId = targetDatasource.DatasourceId,
    GatewayId = targetDatasource.GatewayId
};

方案2:Rest API 调用注意事项

你现有请求体结构正确,若仍报错优先检查前置限制,其次确认调用接口的令牌权限包含Dataset.ReadWrite.All范围。

额外说明

如果确认数据源使用了参数化配置,需要调用更新数据集参数接口修改参数值,再刷新数据集即可完成数据源切换,无需调用更新数据源接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:15:02