Visual Studio: 将 ReportViewer 与用户生成的数据库文件(数据源)结合使用

Visual Studio: Using ReportViewer with a user-generated database file (datasource)

我的程序允许用户创建本地 SQL 服务器数据库文件 (.mdf) 来存储大量生成的数据。现在,我想创建报告,让用户 select 程序为他们生成的数据库。这意味着我无法将数据源附加到我的应用程序以创建 RDLC。但是,所有数据库都具有相同的模式,这些模式来自我为该程序创建的某个 "master" 数据库。

如何使用带有动态生成的数据库文件的 ReportViewer 创建报告?

我正在考虑使用查询将数据从生成的数据库复制到我的 "master" 数据库,生成报告,然后截断主数据库,这样我就可以使用主数据库创建 RDLC .但是,这似乎效率低下且混乱。有更好的方法吗?

谢谢。

创建数据源以直接指向您的主数据库,然后在报表中创建一个参数,并在 运行 "actual" 报表之前请求它。此参数可以是一个组合或复选框,它将具有从您获取数据库名称的查询生成的数据作为值。

最后在您的报告中使用参数作为变量,然后 select 来自您真正需要的数据库,例如:

Select table from mydatabase.schema.table

这对我有用:

首先,更新 "master" 数据库的连接字符串以指向您要访问的数据库,就像 dbamex 所建议的那样。例如,如果您的 app.config:

中有此连接字符串
<add name="MyConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Resources\SSA.mdf;Integrated Security=True;Connect Timeout=30"

然后你可以在你的代码中添加这样的东西,当你想访问用户生成的数据库时可以调用它:

Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
config.ConnectionStrings.ConnectionStrings("MyConnectionString").ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" & new_db_path & ";Integrated Security=True;Connect Timeout=30"
config.Save(ConfigurationSaveMode.Modified)

因此,您应用中使用连接字符串的任何数据集都将更新为指向新的数据集。希望这有帮助。