无法通过 ReportViewer 更改报表的数据源。您可以使用 Web 服务更改数据源,但这实际上会更改服务器上所有用户的数据源 - 可能不是您想要做的。
我认为最接近的方法是使用嵌入式数据源构建报表,该数据源使用参数值来控制其连接字符串。您可以构建一个共享数据集,按名称(“Test”、“Migration”等)提供连接字符串,并将该名称作为参数传递给报告。
你需要:
- 不会更改的共享数据源。
- 返回连接名称列表的共享数据集,例如“测试”和“迁移”。让我们称之为
NamedConnections。这些可以来自共享数据源中的表,也可以在数据集的查询中硬编码。
- 一个共享数据集,它接受一个
@NamedConnection参数并返回一个完整的连接字符串的字符串值。同样,这些可能来自数据库或被硬编码。我们称之为SelectedConnection
- 报告上的一个
@NamedConnection参数。这应该是可见的,并且应该将NamedConnections数据集用于其可用值。
- 使用数据集作为其默认值的报表的
@ConnectionString 内部参数。SelectedConnection
- 报表中不使用
@ConnectionString参数的嵌入式数据源。这允许您使用数据集设计器来构建您的数据集。我会打电话StaticConnection的。
- 报表中使用
@ConnectionString参数作为其连接字符串的嵌入式数据源。报表设计完成并准备好部署后,切换您的数据集以使用此数据源。让我们称之为DynamicConnection。
例如,现在使用 ReportViewer,将值“Test”传递给@NamedConnection参数。然后SelectedConnection数据集可以运行并向@ConnectionString参数提供适当的连接字符串,然后由DynamicConnection数据源使用。
实际的数据源引用永远不会改变,但其中的连接字符串会改变。