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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top