Sql server Visual Studio:将ReportViewer与用户生成的数据库文件(数据源)一起使用

Sql server Visual Studio:将ReportViewer与用户生成的数据库文件(数据源)一起使用,sql-server,database,visual-studio,rdlc,reportviewer,Sql Server,Database,Visual Studio,Rdlc,Reportviewer,我的程序允许用户创建本地SQL Server数据库文件(.mdf),以存储大量生成的数据。现在,我想创建报告,让用户选择程序为其生成的数据库。这意味着我不能将数据源附加到我的应用程序以创建RDLC。但是,所有数据库都有相同的模式,来自我为程序创建的某个“主”数据库 如何使用ReportViewer和动态生成的数据库文件创建报告 我正在考虑使用查询将数据从生成的数据库复制到我的“主”数据库,生成一个报告,然后截断主数据库,以便使用主数据库创建RDLC。然而,这似乎是低效和混乱的。有更好的方法吗 谢

我的程序允许用户创建本地SQL Server数据库文件(
.mdf
),以存储大量生成的数据。现在,我想创建报告,让用户选择程序为其生成的数据库。这意味着我不能将数据源附加到我的应用程序以创建RDLC。但是,所有数据库都有相同的模式,来自我为程序创建的某个“主”数据库

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

我正在考虑使用查询将数据从生成的数据库复制到我的“主”数据库,生成一个报告,然后截断主数据库,以便使用主数据库创建RDLC。然而,这似乎是低效和混乱的。有更好的方法吗


谢谢。

创建直接指向主数据库的数据源,然后在报告中创建一个参数,并在运行“实际”报告之前请求它。这个参数可以是一个组合或复选框,它的值将是从您获取数据库名称的查询中生成的数据

最后,在报告中使用参数作为变量,然后从DB中选择您真正需要的参数,如:

Select table from mydatabase.schema.table

这就是我的工作原理:

首先,按照dbamex的建议,更新“master”数据库中的连接字符串,以指向要访问的数据库。例如,如果您的app.config中有此连接字符串:

<add name="MyConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Resources\SSA.mdf;Integrated Security=True;Connect Timeout=30"

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

谢谢。我真的很感谢你的回答。你能补充更多细节吗?例如,将数据源指向我的主数据库是什么意思?我目前没有安装VS,因此将使用内存。首先创建一个参数,有一个从查询中获取值的选项,在它上面创建一个查询作为“从sysdatabases中选择dbname”,然后为您的数据源指向您的服务器并使用master database,在查询中您应该指定“select table from@parameter_name.dbo.table”,希望这有所帮助。抱歉,你能解释一下参数是什么吗?比如,您所说的“创建一个参数并在运行“实际”报告之前请求它”是什么意思?
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)