参数化数据集查询语句

如上篇博客中所讲述的,数据源连接字符串可通过增加报表参数,从而进行动态改变,连接到不同的数据库当中去,今天我们主要来学习在ActiveReports中参数化数据集查询语句,同样的原理,用报表参数来接收外界的输入进而影响实际生成的数据。

发布于 2017/04/29 00:00

ActiveReports

如上篇博客中所讲述的,数据源连接字符串可通过增加报表参数,从而进行动态改变,连接到不同的数据库当中去,今天我们主要来学习在ActiveReports中参数化数据集查询语句,同样的原理,用报表参数来接收外界的输入进而影响实际生成的数据。

 

1. 先定义好一个静态的数据集。如:


select * from Table1

2.  修改数据集的查询语句,使之成为一个使用参数的表达式,如:


="select * from " &  Parameters!tableName.Value

Oracle数据库注意:
库名和表名之间的小圆点,必须放在参数中,不能放在表达式的常数部分:
="select * from " &  Parameters!P1.Value & "JOBS" 这样可以
="select * from " &  Parameters!P1.Value & ".JOBS" 这样不行,提示table不存在。

SQL Server数据源,可能报表设计器不允许保存这样的动态查询语句,可用记事本打开rdlx文件,将<Query>部分的内容改为下面的形式:
<Query>
    <CommandText>="select * from " &amp;  Parameters!tableName.Value</CommandText>
    <DataSourceName>DataSource1</DataSourceName>
</Query>
然后再用设计器打开,即可预览效果。

注意:
SQL语句中完整的Table名构成是:服务器名.数据库名.对象所有者.对象 。
比如 SrvSql1.ErpDb.dbo.SalesOrders ,如果其中一部分要参数化,最好是参数的默认值为空字符串时,还能保证整个SQL语句是正确的。
比如说, Parameters!DBServer.Value & ".Table1 这个语句片段中,Table1是表名,前面直接冠以服务器名是不行的,缺少数据库名和dbo,
可改成 Parameters!DBServer.Value & "数据库名.dbo.Table1 这个样子。
注意双引号后的小圆点(.Table1这个字符串的第一个字符),最好放在参数值中,
这样,即使参数值为空串,表达式结果中,不会出来 from .数据库名.dbo.表名 这样的非法表名,
不带点的 from 数据库名.dbo.表名 应该就是合法的SQL。

还有一个,使用 服务器名. 这个前缀的前提是,数据源当前连接的数据库服务器中,
应该已经定义有LinkedServer,这个是SQL Server的要求。
对于Oracle,也是类似,应该需要事先使用 Create DbLink语句创建好服务器之间的数据库链接。
比如说,数据源当前连接到 SvrSql1,参数化的SQL语句中需要查询 SvrSql2里面的数据库表,
那么必须事先使用SQL Server管理工具,在SvrSql1上使用sp_addlinkedserver创建好指向SvrSql2的服务器链接。

 

模板示例:

了解ActiveReports产品更多特性:

/developer/activereports

下载产品体验产品功能:

/download/?pid=16

ActiveReports 报表控件| 下载试用

ActiveReports 是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForm / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求,作为专业的报表工具为全球超过 300,000 开发人员提供了全面的报表开发服务。

您对ActiveReports产品的任何技术问题,都有技术支持工程师提供1对1专业解答,点击此处即可发帖提问>>技术支持论坛

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态