Filtro per selezione elementi

venerdì 03 novembre 2006 - 10.02

squilibrio Profilo | Expert

Ciao, ho una pagina che contiene alcuni DDL, in base alla selezione fatta
dall'utente dovrei caricare determinati elementi tramite una SELECT * FROM
WHERE Campo=@Selezione AND Campo2=@Selezione2

come posso fare in modo che se l'utente non sceglie nulla nei DDL,
automaticamente vengano presi tutti gli elementi della select? (quindi come
se la WHERE per quel parametro non venga considerata??)

Grazie

alx_81 Profilo | Guru

>Ciao,
Ciao!

>ho una pagina che contiene alcuni DDL, in base alla selezione
>fatta
>dall'utente dovrei caricare determinati elementi tramite una
>SELECT * FROM
>WHERE Campo=@Selezione AND Campo2=@Selezione2
>
>come posso fare in modo che se l'utente non sceglie nulla nei
>DDL,
>automaticamente vengano presi tutti gli elementi della select?
>(quindi come
>se la WHERE per quel parametro non venga considerata??)
>

Se non ho capito male hai delle combobox con alcuni valori che sono il possibile filtro di una query e vuoi che se in base a quelli valorizzati ti esegua la where corretta.. giusto?

in tal caso, puoi procedere così:

ti fai una stored procedure con all'interno il tuo statement sql, impostando i parametri di filtro a NULL:

CREATE PROCEDURE GetElementi
(
@param1 int = NULL,
@param2 varchar(10) = NULL
AS
BEGIN
SELECT * FROM TuaTabella
WHERE (@param1 IS NULL OR campo1 = @param1)
AND (@param2 IS NULL OR campo2 = @param2)
END

In questo modo, se non passi i parametri la where si verifica per tutti, se ne passi viene valutata la seconda parte della OR e quindi ti filtra per i dati della where indicati dal parametro..


>Grazie
Di nulla!
>

Alx81 =)

http://blogs.dotnethell.it/suxstellino

squilibrio Profilo | Expert

Proprio questo!! Grazie mille!

alx_81 Profilo | Guru

Se ti è stata di aiuto, accetta la risposta che chiudiamo il thread =)
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

tecnovico Profilo | Junior Member

scusate se mi intrometto...dopo che definisco la stored procedure, come la eseguo da un metodo di una mia pagina asp.net alla pressione di un button per esempio?

alx_81 Profilo | Guru

>scusate se mi intrometto...dopo che definisco la stored procedure,
>come la eseguo da un metodo di una mia pagina asp.net alla pressione
>di un button per esempio?

Ciao!
guarda il post parallelo a questo..
http://www.dotnethell.it/forum/messages.aspx?ThreadID=11525

Qui indico a grandi linee come richiamare la stored procedure..

cmq, per quanto riguarda il filtro che ho proposto nella stored procedure, ascoltando anche i commenti lasciati su un mio post, ti consiglio di dare una letta a questo, per ottimizzare al meglio la tua sp:

http://blogs.dotnethell.it/suxstellino/Post_8195.aspx

Ciao!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

tecnovico Profilo | Junior Member

aspetta...stiamo creando un po di entropia...il post parellelo che mi hai segnalato è il mio, sono lo stesso utente a cui hai dato spiegazioni.
ho visto velocemente msdn(il link che mi hai consegnato, ma non ho trovato un esempio x richiamare da cosice c# un stored procedure...

alx_81 Profilo | Guru



fantastico..
dunque.. facciamo tutto passo passo, ok?
L'esempio è in VB.net, ma è praticamente identico in C#.

devi utilizzare il namespace System.Data.SqlClient (o Oledb, ma meglio SqlClient, poichè ottimizzato per SqlServer)..
quindi:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

tutto chiaro?
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

tecnovico Profilo | Junior Member

magnifico... grazie

alx_81 Profilo | Guru

di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

gae58 Profilo | Senior Member

ho provato il tuo suggerimento per poter far visulizzare tutti i movimenti os olo quello del parametro, ma non mi funziona.

Qualche suggerimento?



Gaetano

alx_81 Profilo | Guru

>ho provato il tuo suggerimento per poter far visulizzare tutti
>i movimenti os olo quello del parametro, ma non mi funziona.
>Qualche suggerimento?
il meccanismo @parametro IS NULL OR campo = @parametro funziona.
Il fatto è che devi provare bene tutte le chiamate che fai. Stai attento perchè se passi stringa vuota e non NULL il db non ti tornerà mai nulla.
Con quel test devi passare NULL.

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

avevo pensato ad una cosa del genere, soltanto che non so come fare a dare valore NULL all'elemento --- Tutti --- che ho inserito manualmente nella DDL, ho notatao che prende sempre un valore carattere.

Forse all'atto della selezione dell'elemento devo controllare se ddl.selectIndex.changed è uguale a tutti e forzare il valore NULL?


Gaetano

alx_81 Profilo | Guru

>Forse all'atto della selezione dell'elemento devo controllare
>se ddl.selectIndex.changed è uguale a tutti e forzare il valore
>NULL?
Hai due modi

1) Ti fai delle costanti che gestiscono il default NULL per tipo. Ad esempio per l'intero:

int NullInt = -1

E poi, quando chiami il metodo che richiama la stored procedure controlli se il param passato è il valore di default. Se lo è, passi alla Stored Procedure (Oggetto command, parameter) DBNull.Value.

2) Passi un valore di default al command e poi nella stored procedure fai l'IF

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

ciao grazie per la risposta.
Nel frattempo ho fatto delle prove e con questo codice sembra funzionare. Non so se sia esatto e se convenga usarlo.

Nella DDL ho inserito lell'Item ---Tutti --- il valore 'T'. Nella SP ho inserito un parametro tipo Var con Valore 'T'.
ALTER PROCEDURE [dbo].[Prova]
@Codice nvarchar(4),
@DDL nvarchar(4) = "T"
AS
IF @Codice = @DDL
select Codice, Descrizione from ProvaTab
ELSE
select Codice, Descrizione from ProvaTab WHERE Codice=@Codice

RETURN
che ne pensi?

grazie
Gaetano

alx_81 Profilo | Guru

>Nella DDL ho inserito lell'Item ---Tutti --- il valore 'T'.
>Nella SP ho inserito un parametro tipo Var con Valore 'T'.
>ALTER PROCEDURE [dbo].[Prova]
>@Codice nvarchar(4),
>@DDL nvarchar(4) = "T"
>AS
> IF @Codice = @DDL
> select Codice, Descrizione from ProvaTab
> ELSE
> select Codice, Descrizione from ProvaTab WHERE Codice=@Codice
>
> RETURN
Sì, va bene
se ritieni che qualche risposta possa esserti stata utile, accetta che chiudiamo il thread.
ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

si grazie,

l'ho già accettata pecedentemente


Gaetano

gae58 Profilo | Senior Member

>1) Ti fai delle costanti che gestiscono il default NULL per tipo.
>Ad esempio per l'intero:
>
>int NullInt = -1
>
>E poi, quando chiami il metodo che richiama la stored procedure
>controlli se il param passato è il valore di default. Se lo è,
>passi alla Stored Procedure (Oggetto command, parameter) DBNull.Value.
>
>2) Passi un valore di default al command e poi nella stored procedure
>fai l'IF

Ora probabilmente mi serve capire quello che mi hai consigliato e ti dico perchè.

Per fare esperienza con le SP, ho simulato la situazione di una ddl con una gridView.
Nella realtà, devo gestire il filtro con 4 ddl e queste 4 DDl possono avere o meno il dato. Quindi quello che mio serve capire è se posso creare la parte WHERE della quesry in manira dinamica.
Nel senso mi creo una var in cui inserisco i campi che devono corripsondere unicamente se la ddl ha un dato.

Spero di essere stato chiaro.


Gaetano

alx_81 Profilo | Guru

>Per fare esperienza con le SP, ho simulato la situazione di una
>ddl con una gridView.
>Nella realtà, devo gestire il filtro con 4 ddl e queste 4 DDl
>possono avere o meno il dato. Quindi quello che mio serve capire
>è se posso creare la parte WHERE della quesry in manira dinamica.
>Nel senso mi creo una var in cui inserisco i campi che devono
>corripsondere unicamente se la ddl ha un dato.

Allora devi usare la tecnica della prima risposta
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5