Query TatbleAdapter

venerdì 16 aprile 2010 - 09.32

Gemini Profilo | Expert

Ciao a tutti
sto cercando di utilizzare i TableAdapter e ho un problema con le query.
Come faccio a definire delle query le cui condizioni dipendono dalla presenza o no di un campo?
Per esempio in una ricerca avanza non è detto che l'utente inserisca tutti i campi oppure la creazione della query potrebbe variare in base alel scelte fatte dall'utente.
Es.:
string sqlCognome = string.Empty;
if (cognome != string.Empty)
sqlCognome = " AND i.cognome like '%" + cognome + "%' ";
else
sqlCognome = " AND nome like '%" + nome + "%' ";

string sqlComuneStudio = string.Empty;
if (comune_studio != string.Empty) sqlComuneStudio = " AND i.localita='" + comune_studio + "' ";

C'è un modo per passare al TAbleAdapter questa query da codice?
Grazie mille

string sql = "SELECT * " +
"FROM iscritti " +
"WHERE 1 " + sqlCognome + sqlComuneStudio;

alx_81 Profilo | Guru

>Ciao a tutti
Ciao

>sto cercando di utilizzare i TableAdapter e ho un problema con
>le query.
>Come faccio a definire delle query le cui condizioni dipendono
>dalla presenza o no di un campo?
>Per esempio in una ricerca avanza non è detto che l'utente inserisca
>tutti i campi oppure la creazione della query potrebbe variare
>in base alel scelte fatte dall'utente.
>Es.:
>string sqlCognome = string.Empty;
>if (cognome != string.Empty)
>sqlCognome = " AND i.cognome like '%" + cognome + "%' ";
>else
> sqlCognome = " AND nome like '%" + nome + "%' ";
>string sqlComuneStudio = string.Empty;
>if (comune_studio != string.Empty) sqlComuneStudio = " AND i.localita='"
>+ comune_studio + "' ";
>C'è un modo per passare al TAbleAdapter questa query da codice?
Intanto devo farti presente che con query scritte come mi hai illustrato sei soggetto a sql injection. Dai una letta a questo articolo:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

detto questo, se potessi utilizzare il framework 3.5, ti consiglierei di ricavare gli utenti per alcuni campi obbligatori nella ricerca e poi lavorarteli con LINQ per non appesantire più di tanto il database.
Inoltre, evita sempre di permettere ricerce su "tutti i campi" o comunque su molti di essi. Cerca di pilotare chi usa soluzioni di questo tipo verso un filtro mirato dei VERI campi che l'utente usa per ricercare.
Di solito si tratta di vizi

Comunque puoi anche usare una soluzione non troppo elegante per evitare le if, prestazionalmente non è il massimo. Basta fare una where tipo:

WHERE
(@Parametro1 IS NULL OR Campo1 = @Parametro1)
AND
(@Parametro2 IS NULL OR Campo2 = @Parametro2)
...

ma devi almeno usare query parametriche e non concatenazioni come fai tu.

>Grazie mille
di nulla!
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5