2012-01-20 2 views
0

У меня есть BIRT-Report, в котором я хочу показать определенный объем данных (Hi Capapt Очевидный). Все идет нормально. Теперь данные лежат в базе данных MSSQL, и я подключаюсь к нему с помощью драйвера jdbc, все это работает отлично.Birt Report Parameter as WHERE-clause

Проблема в том, что я хочу передать параметр отчета «запрос» в этот отчет. Я знаю, как передать параметры отчета следующим образом: запрос:

SELECT * FROM table WHERE field = ? 

И затем вы определяете параметр в Dataset-параметров.

Теперь то, что я хочу сделать, это следующее:

SELECT * FROM table ? 

Где мой параметр содержит что-то вроде

WHERE field1 = 'xyz' AND field2 = 2 

Проблема заключается в том, что BIRT автоматически добавляет апостроф в начале и в конец каждого параметра строки, чтобы окончательный запрос выглядел так:

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

Это приводит к тому, что MSSQL не может обрабатывать запрос по очевидным причинам. Как вы можете это исправить?

Заранее спасибо

+1

Есть ли причина, по которой вы не хотите кодировать свой запрос как 'SELECT * FROM table WHERE field =? и field2 =? '? (Можно запрограммировать свой запрос по желанию с помощью динамического sql, но это откроет ваш код для риска атаки SQL-инъекций - см. Http://xkcd.com/327/.) –

ответ

1

Что касается инъекционного риска SQL вы можете написать:

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

в beforeOpen Набор данных сценария.

Но я настоятельно рекомендую избегать этой конструкции и переписывать запрос в форму, предложенную Марком Баннистером, если вы на 100% не уверены, что ввод безопасен.

 Смежные вопросы

  • Нет связанных вопросов^_^