Utilizzo dei parametri in MS Reporting Services (SQL Server 2008) rispetto a un'origine dati ODBC
-
08-06-2019 - |
Domanda
Sto scrivendo un report in Visual Studio che accetta un parametro di input dell'utente e viene eseguito su un'origine dati ODBC.Vorrei scrivere la query manualmente e fare in modo che i servizi di reporting sostituiscano parte della clausola where con il valore del parametro prima di inviarla al database.Ciò che sembra accadere è che il @parmName
Presumo che verrà sostituito venga effettivamente inviato come parte dell'istruzione SQL.Mi manca un'impostazione di configurazione da qualche parte o semplicemente non è possibile?
Non sto utilizzando l'opzione di filtro nello strumento perché sembra riportare il set di dati completo dal database ed eseguire il filtraggio su SQL Server.
Soluzione
Sembra che dovrai trattare l'istruzione SQL come un'espressione.Per esempio:
="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value
Se la clausola where è una stringa dovresti fare quanto segue:
="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"
Importante:Non utilizzare interruzioni di riga nell'espressione SQL.Se lo fai, riceverai un errore.
Torna se hai bisogno di ulteriore assistenza.
Altri suggerimenti
ODBC non usa il vecchio "?" Sintassi per i parametri?Prova questo:
select col1, col2 from table1 where col3 = ?
L'ordine dei parametri diventa quindi importante, ma è meno vulnerabile all'iniezione SQL rispetto alla semplice aggiunta del valore del parametro.
Si è verificato lo stesso problema durante il tentativo di interrogare un database di accesso tramite ODBC.
La mia domanda originale: SELECT A.1 FROM A WHERE A.1 = @parameter
ha dato origine ad un errore.Modificato in: SELECT A.1 FROM A WHERE A.1 = ?
.
È quindi necessario mappare il parametro di query con il parametro di report.
Sono un po' confuso su questa domanda, se stai cercando un utilizzo semplice dei parametri allora la notazione è:*paramName*
, tuttavia, se desideri modificare strutturalmente il file WHERE
clausola (come potresti fare in sql+ usando ?), dovresti davvero utilizzare il codice personalizzato all'interno del report per definire una funzione che restituisca lo sql richiesto per la query.
Sfortunatamente, quando si utilizza codice personalizzato, non è possibile fare riferimento direttamente ai parametri nella query generata ma devono avere valori concatenati nella stringa risultante, introducendo così il potenziale per SQL
iniezione.