如何在 C# 代码中将嵌入式数据源添加到 RDL?

Posted

技术标签:

【中文标题】如何在 C# 代码中将嵌入式数据源添加到 RDL?【英文标题】:How can I add an embedded data source to RDL in C# code? 【发布时间】:2013-05-03 22:46:46 【问题描述】:

我正在尝试在多租户情况下使用 s-s-rS。我们想要支持的基本版本是 SQL Server 2008,但如果需要 R2,我们可能会接受。

我目前正在使用 ReportingService2005.asmx 端点,它似乎公开了 ReportService2005SoapClient 类(尽管所有示例似乎都显示了 ReportingService2005 类)。

当我们运行报表时,我想从服务器复制该报表,添加嵌入式数据源,将数据集指向该数据源,然后运行报表。

我已经做到了:

    从服务器获取 RDL

    修改 XML 以添加数据源

    将数据集指向新的数据源

...但是当我尝试“CreateReport”时,我收到以下错误:

System.Web.Services.Protocols.SoapException:数据集“DataSet1”引用了不存在的数据源“mydatasource_LOCAL”。 在 Microsoft.ReportingServices.Library.ReportingService2005Impl.ExecuteBatch(Guid batchId) 在 Microsoft.ReportingServices.WebServer.ReportingService2005.ExecuteBatch()

我已将数据集添加到 RDL,它看起来与我在设计器中添加一个时相同。但是,我认为需要向服务器添加一些东西?我错过了什么?

(顺便说一句,我知道 MS Dynamics 在单个实例中启用了多租户 s-s-rS,但我没有看到有关他们如何做到这一点的信息。如果他们有任何代码或他们共享的任何东西,有人可以指出我会是太棒了。)

【问题讨论】:

【参考方案1】:

您或多或少地使用了正确的端点。来自MSDN:

ReportService2005 和 ReportService2006 端点在 SQL Server 2008 R2 中已弃用。 ReportService2010 端点包含两个端点的功能并包含额外的管理功能。

无论如何,您提到您在第 2 步中修改了 RDL 以使用新数据源。我可能错了,但我认为您可能仍需要使用 @987654326 将 DataSource 项目添加到您的报表目录中@CreateDataSource(...) 方法。

如果您从 Visual Studio 将新报表部署到报表服务器,它还会在日志中提及它在部署报表之前正在部署数据源。

当然,您也可以使用报表管理器预先在服务器上创建该数据源(尽管“mydatasource_LOCAL”可能不是一个理想的名称)。

【讨论】:

当我在报表中使用嵌入式数据源时,我看不到它部署数据源,只有当我创建共享数据源时。我会仔细检查以确定。 (是的,使用那个端点,因为我们需要支持 SQL Server 2008 及更高版本)。 当我部署报表时,它确实会出现,在报表管理器数据库中创建了一个数据源。它有一个与报告匹配的项目 ID。但是,如何获取我无法创建的报告的 itemid 以便创建数据源? 似乎我什至不必修改 RDL。只需克隆报表,然后使用为报表创建嵌入式数据源的 SetItemDataSources。

以上是关于如何在 C# 代码中将嵌入式数据源添加到 RDL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在后面的c#代码中将div添加到容器div

如何在c#中将数据添加到集合列表中[重复]

如何在 C# 中将子节点添加到肥皂信封?

如何在 Visual Studio 2010 中将数据保存到本地数据库?

如何在 Spring Boot 应用程序中将用户添加到嵌入式 tomcat?

如何在 C# 中将更新参数添加到 SQLDataSource