3

我在我的 ReportServer 上部署了一份报告。此报告使用一个共享数据源,该数据源也部署在 ReportServer 上。我正在使用 WindowsFormsHost 控件的 WPF 应用程序中使用 ReportViewer。通过配置 ReportViewer 的 ServerReport 属性,我可以在我的应用程序中正确显示来自 ReportServer 的报告。

我的问题是无论如何都可以更改我的报告正在使用的 ReportServer 上部署的共享数据源的连接字符串。

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

谁能告诉我在 C# 代码中更新共享数据源的解决方案?

4

1 回答 1

3

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

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

你需要:

  1. 不会更改的共享数据源。
  2. 返回连接名称列表的共享数据集,例如“测试”和“迁移”。让我们称之为NamedConnections。这些可以来自共享数据源中的表,也可以在数据集的查询中硬编码。
  3. 一个共享数据集,它接受一个@NamedConnection参数并返回一个完整的连接字符串的字符串值。同样,这些可能来自数据库或被硬编码。我们称之为SelectedConnection
  4. 报告上的一个@NamedConnection参数。这应该是可见的,并且应该将NamedConnections数据集用于其可用值。
  5. 使用数据集作为其默认值的报表的@ConnectionString 内部参数。SelectedConnection
  6. 报表中不使用@ConnectionString参数的嵌入式数据源。这允许您使用数据集设计器来构建您的数据集。我会打电话StaticConnection的。
  7. 报表中使用@ConnectionString参数作为其连接字符串的嵌入式数据源。报表设计完成并准备好部署后,切换您的数据集以使用此数据源。让我们称之为DynamicConnection

例如,现在使用 ReportViewer,将值“Test”传递给@NamedConnection参数。然后SelectedConnection数据集可以运行并向@ConnectionString参数提供适当的连接字符串,然后由DynamicConnection数据源使用。

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

于 2015-04-08T20:27:13.490 回答