我有一份BIRT报告,其中我想要显示一定数量的数据(Hi Capt.Bhisvious)。到现在为止还挺好。现在数据位于MSSQL数据库中,并且我使用jdbc驱动程序连接到它,这一切都完美无缺。
现在的问题是我想将“查询”报告参数传递给此报告。我知道如何以下列方式将参数传递给报表: 查询:
SELECT * FROM table WHERE field = ?
然后在数据集 - 参数中定义参数。
现在我要做的是以下内容:
SELECT * FROM table ?
我的参数包含类似
的内容WHERE field1 = 'xyz' AND field2 = 2
问题是BIRT会在每个String-Parameter的开头和结尾自动添加单引号,以便最终查询看起来如此:
SELECT * FROM table 'WHERE field1 = 'xyz' AND field2 = 2'
这导致MSSQL由于显而易见的原因无法处理查询。 你怎么解决这个问题?
提前致谢
答案 0 :(得分:1)
关于SQL注入风险,您可以写:
this.queryText = 'SELECT * FROM table ' + params['where_clause'].value;
在beforeOpen
数据集脚本中。
但我强烈建议避免这种构造,并将查询重写为Mark Bannister提出的表格,除非您100%确定输入是安全的。