2012-01-20 10 views
0

私は一定量のデータを表示したいBIRT-Reportを持っています(Hi Capt。Obvious)。ここまでは順調ですね。データはMSSQLデータベース内にあり、jdbcドライバを使用してデータに接続しています。これは完全に機能します。WHERE句としてのBirtレポートパラメータ

問題は、このレポートに「クエリ」レポートパラメータを渡したいということです。 クエリ:

SELECT * FROM table WHERE field = ? 

そして、あなたは、データセット・パラメータにパラメータを定義する私は、次の方法でレポートにパラメータを渡す方法を知っています。

は今、私がやりたいことは以下の通りである。私のパラメータは

WHERE field1 = 'xyz' AND field2 = 2 

のようなものが含まれてい

SELECT * FROM table ? 

問題は、BIRTは自動的に最初にし、単一引用符を追加することです最終的なクエリは次のようになります:

SELECT * FROM table 'WHERE field1 = 'xyz' AND field2 = 2' 

明白な理由でMSSQLがクエリを処理できなくなってしまいます。 これをどのように修正できますか? SQLインジェクションのリスクに関しては、事前

+1

クエリを 'SELECT * FROM table WHERE field =? 'としてコード化したくない理由はありますか? field2 =? '? (動的SQLを使用してクエリをコード化することは可能ですが、これによりSQLインジェクション攻撃の危険にさらされるコードが開かれます - http://xkcd.com/327/を参照してください)。 –

答えて

1

おかげであなたが書くことができます:beforeOpenデータセットのスクリプトで

this.queryText = 'SELECT * FROM table ' + params['where_clause'].value; 

しかし、入力が安全であることが100%保証されていない限り、この構築を避けてMark Ba​​nnisterが提案した形式にクエリを書き直すことを強くお勧めします。