如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2010 中将数据保存到本地数据库?