Использование параметров в службах отчетов MS (SQL Server 2008) для источника данных ODBC

StackOverflow https://stackoverflow.com/questions/9275

Вопрос

Я пишу отчет в Visual Studio, который принимает входной параметр пользователя и запускается на основе источника данных ODBC.Я хотел бы написать запрос вручную, и службы отчетов заменили часть предложенияwhere на значение параметра перед отправкой его в базу данных.Кажется, что происходит то, что @parmName Я предполагаю, что будет заменено, на самом деле отправляется как часть оператора SQL.Я где-то упускаю какие-то настройки конфигурации или это просто невозможно?

Я не использую параметр фильтра в этом инструменте, поскольку он возвращает полный набор данных из базы данных и выполняет фильтрацию на SQL-сервере.

Это было полезно?

Решение

Похоже, вам нужно рассматривать оператор SQL как выражение.Например:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

Если предложениеwhere является строкой, вам необходимо сделать следующее:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

Важный:Не используйте разрывы строк в выражении SQL.Если вы это сделаете, вы получите сообщение об ошибке.

Звоните, если вам понадобится еще помощь.

Другие советы

Разве ODBC не использует старый "?" Синтаксис для параметров?Попробуй это:

select col1, col2 from table1 where col3 = ?

Тогда порядок ваших параметров становится важным, но он менее уязвим для SQL-инъекций, чем простое добавление значения параметра.

Обнаружена та же проблема при попытке запросить базу данных доступа через ODBC.

Мой первоначальный запрос: SELECT A.1 FROM A WHERE A.1 = @parameter привело к ошибке.Изменено на: SELECT A.1 FROM A WHERE A.1 = ?.

Затем вам необходимо сопоставить параметр запроса с параметром отчета.

Меня немного смущает этот вопрос. Если вы ищете простое использование параметров, то обозначения будут такими:*paramName* , однако если вы хотите структурно изменить WHERE (как вы могли бы использовать в sql+ ?), то вам действительно следует использовать собственный код в отчете, чтобы определить функцию, которая возвращает требуемый sql для запроса.

К сожалению, при использовании пользовательского кода на параметры нельзя ссылаться непосредственно в сгенерированном запросе, но их значения должны быть объединены в результирующую строку, что создает потенциальную возможность SQL инъекция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top