我想从c#代码更新SSRS报告的共享数据源

时间:2015-04-02 06:02:52

标签: wpf reporting-services datasource reportviewer reportserver

我在ReportServer上部署了一个报告。此报告使用的是共享的dataSource,它也部署在ReportServer上。 我在使用WindowsFormsHost控件的WPF应用程序中使用ReportViewer。通过配置ReportViewer的ServerReport属性,我可以正确地在我的应用程序中显示ReportServer报告。

我的问题是,无论如何都要更改我的报告正在使用的ReportServer上部署的共享DataSource的连接字符串。

实际上,我想对同一个数据库的多个副本使用相同的报告进行测试和迁移。

有谁能告诉我一个用c#代码更新共享数据源的解决方案?

1 个答案:

答案 0 :(得分:3)

无法通过ReportViewer更改报告的数据源。您可以使用Web服务更改数据源,但这实际上会为所有用户更改服务器上的数据源 - 可能不是您想要做的。

我认为最接近的是使用嵌入式数据源构建报表,该数据源使用参数值来控制其连接字符串。您可以构建一个共享数据集,按名称提供连接字符串(“测试”,“迁移”等),并将该名称作为参数传递给报告。

你需要:

  1. 不会更改的共享数据源。
  2. 一个共享数据集,它返回连接名称列表,例如“Test”和“Migration”。我们称之为NamedConnections。这些可以来自共享数据源中的表,也可以在数据集的查询中进行硬编码。
  3. 一个共享数据集,它接受@NamedConnection参数并返回一个完整连接字符串的单个字符串值。同样,这些可能来自数据库或硬编码。我们称之为SelectedConnection
  4. 报告中的@NamedConnection参数。这应该是可见的,应该使用NamedConnections数据集作为其可用值。
  5. 报告中的@ConnectionString 内部参数,该参数使用SelectedConnection数据集作为其默认值。
  6. 报告中使用@ConnectionString参数的嵌入数据源。这允许您使用数据集设计器来构建数据集。我称之为StaticConnection
  7. 报告中 的嵌入数据源使用@ConnectionString参数作为其连接字符串。报告设计完成并准备好部署后,请切换数据集以使用此数据源。我们称之为DynamicConnection
  8. 现在使用ReportViewer,您将值“Test”传递给@NamedConnection参数。然后,SelectedConnection数据集可以运行,并为@ConnectionString参数提供适当的连接字符串,然后由DynamicConnection数据源使用。

    实际数据源引用永远不会更改,但其中的连接字符串会更改。