39 messaggi dal 26 gennaio 2009
Ciao, ho questa necessità: Ho una tabella su SQL composta dai seguenti campi:

ID | UTENTE | RICHIESTA | DESCRIZ | DATA |

Devo mettere a disposizione all'utente una pagina che gli permetta di
effettuare delle ricerce combinate o semplici. Vi porto un esempio:

L'utente può voler ricercare l'ID della transazione nella quale l'utente era
"BEPPE" la data è compresa tra X ed Y e richiesta contiene la parola
baccabanana.

La prima cosa che mi è venuta in mente è semplice: creare una query e nei
campi where inserire TUTTI i parametri.

Questo funziona se l'utente inserisce TUTTI i parametri, ma cosa accade se
l'utente non vuole inserire niente ad esempio, nel campo username? che passo
alla query un parametro vuoto, e lei cerca nel DB il vuoto, tornando quindi
empty.

Come si può ovviare? (se si può ovviare)

La soluzione che mi viene in mente è di giocare di IF e fare 3000 mila query
in base allo stato dei controlli... Però c'è da sparassi...

P.s. uso Web Forms 3.5.
Ciao, Norby
bhe non c'è da saprarsi e non servono n mila if :D

dai una lettura a questo:

http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-1

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
179 messaggi dal 12 luglio 2007
Scusa ma questa Dynamic sql significa semplicemente crearsi dinamicamente il comando da lanciare sulla connessione.
Pensavo chissà cosa.

Detto in parole povere, che tra l'altro è il metodo che uso tutt'ora nonostante i vari tableadapter, linq, ecc, è creare una where dinamica concatenando le combinazioni che servono

Un esempio semplice (ma non testato quindi imperfetto)

Sqlcommand.text = "Select campi from tabella where 0=0 " & GeneraWere
Private function GeneraWhere as string
Dim str as new system.text.stringbuilder

'ipotizziamo tu abbia un controllo textbox descriz per il campo descriz
If descriz.lenght > 0 then str.add(" and Descriz like '%" & descriz & "%'")

.....

Return str.tostring
End function

Per il campo data solitamente nelle ricerche metto un range DataDa e DataA così puoi cercare all'interno di un periodo.

Un metodo più bello è quello di creare un tableadapter per la select senza where e poi espanderlo con un metodo custom per passargli i parametri necessari, così non perdi il databinding a designtime.
Magari la prossima volta.
si ma occhio hai problemi di SqlIniection.

le parti di query che concateni devono contenere solo le condizioni no il valore dei campi che va sempre assolutamente passato come SqlParamter

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
179 messaggi dal 12 luglio 2007
Si, si, questo è chiaro.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.