Ricerca tra piu campi con dataset tipizzati in asp 2.0

domenica 09 maggio 2010 - 06.44

basicdany Profilo | Expert

ciao, devo effettuare in un db sql server 2005 una ricerca tra piu campi, i campi potranno essere vuoti pieni a seconda della ricerca che decidde di fare l'utente.
La query che ho provato ha usare nel dataset che poi colleggo al ObjectDataSource1 che poi a collega alla gridView:


SELECT IndRiservato, NumCivico, ID FROM Immobili WHERE IdTipoImmobile = @IDTipoimmobile AND IDContratto=@IDContratto

i campi sono 2 come si vede dalla query, la sintassi esatta quale? perche cosi tiene conto di entrami i cambi, pero l'utente puo decidere di fare ricerca solo con un campo.

grazie a tutti

alx_81 Profilo | Guru

>ciao,
Ciao

>devo effettuare in un db sql server 2005 una ricerca tra
>piu campi, i campi potranno essere vuoti pieni a seconda della
>ricerca che decidde di fare l'utente.
Prima cosa, cerca sempre di limitare le ricerche su tanti campi (due o tre non danno grossi problemi, ma aumentandoli, diminuisce la possibilità di fare indici efficaci, soprattutto quando la ricerca è del tutto a discrezione dell'utente.

>i campi sono 2 come si vede dalla query, la sintassi esatta quale?
>perche cosi tiene conto di entrami i cambi, pero l'utente puo
>decidere di fare ricerca solo con un campo.
Puoi usare una sintassi tipo la seguente, anche se non è il massimo delle prestazioni:

SELECT IndRiservato , NumCivico , ID FROM Immobili WHERE (@IDTipoimmobile IS NULL OR IdTipoImmobile = @IDTipoimmobile) AND (@IDContratto IS NULL OR IDContratto = @IDContratto)

in questo modo, se passi null al parametro il filtro non è considerato.

>grazie a tutti
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

basicdany Profilo | Expert

ciao, grazie, ho inserito questa query:

SELECT ID,Descrizione,IndRiservato, NumCivico,Note FROM Immobili WHERE
(@IDTipoimmobile IS NULL OR IdTipoImmobile = @IDTipoimmobile)
AND
(@IDContratto IS NULL OR IDContratto = @IDContratto)

ma se entrambi i campi sono pieni effettua la ricerca, con un solo campo NO??

nel caso non si puo risolvere, ho creato una query che riempio la grid view manualmente in modo da fare la quesry manualemte e funziona, ma come faccio a impostare al griglia da codice, es far visualizzare alcuni campi invece di altri o impostare le dimensione...puoi postarmi un esempio, grazie tanto

alx_81 Profilo | Guru

>ciao, grazie, ho inserito questa query:
>
>SELECT ID,Descrizione,IndRiservato, NumCivico,Note FROM Immobili
>WHERE
>(@IDTipoimmobile IS NULL OR IdTipoImmobile = @IDTipoimmobile)
> AND
> (@IDContratto IS NULL OR IDContratto = @IDContratto)
>
>ma se entrambi i campi sono pieni effettua la ricerca, con un
>solo campo NO??
quello che non valorizzi DEVE essere NULL, altrimenti la query non va.


--

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

basicdany Profilo | Expert

-come faccio a farli diventare isnull, io metto un campo vuoto nella tabella con l'elenco da caricare nelle drodrowlist:
in pratica carico le droddrowlist con dei sqldatasource,(che diventano i campi della ricerca)
poi passo il dataset con la query da te corretta ad un objctdatasource,
e infine la gridview collegata al objectdatasource.

-ti chiedevo anche come impostare le impostazione al gridview in particolare se rendere visible alcune colonne e le dimensioni, perche ho visto chet utilizzare questi controlli con il codice generato in automatico e un molto limitato, vorrei scrivere tutto via codice, sono riusciuto a riempire il gridview con un datatable che gli passo.

grazie aspetto gentile risposta

alx_81 Profilo | Guru

>-come faccio a farli diventare isnull, io metto un campo vuoto
>nella tabella con l'elenco da caricare nelle drodrowlist:
>in pratica carico le droddrowlist con dei sqldatasource,(che
>diventano i campi della ricerca)
>poi passo il dataset con la query da te corretta ad un objctdatasource,
>e infine la gridview collegata al objectdatasource.
devi controllare. Se il valore selezionato è, ad esempio, -1 o 0, quello che metti come campo non selezionato (nelle dropdown, perchè nelle textbox puoi usare String.Empty), in tal caso passi al parametro il valore DBNull.Value..

>-ti chiedevo anche come impostare le impostazione al gridview
>in particolare se rendere visible alcune colonne e le dimensioni,
>perche ho visto chet utilizzare questi controlli con il codice
>generato in automatico e un molto limitato, vorrei scrivere tutto
>via codice, sono riusciuto a riempire il gridview con un datatable
>che gli passo.
o fai dei templatefield con il relativo templateitem, oppure gestisci a runtime il render del tuo gridview.. ma è un marasma

--

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

siamodelgatto Profilo | Newbie

scusami se riprendo questo post ma sono in questa situazione:

ho creato una ricerca avanzata con textbox e dopbox come parametri per la query, il problema è che la ricerca ha successo solo se tutti i campi sono riempiti.

Come passo la stringa vuota sia nel textbox che nel dropbox quando l'utente non scrive nulla?

"devi controllare. Se il valore selezionato è, ad esempio, -1 o 0, quello che metti come campo non selezionato (nelle dropdown, perchè nelle textbox puoi usare String.Empty), in tal caso passi al parametro il valore DBNull.Value.."

Vorrei dei chiarimenti su questo passaggio, perchè è la soluzione al mio problema.
Grazie

alx_81 Profilo | Guru

>Come passo la stringa vuota sia nel textbox che nel dropbox quando
>l'utente non scrive nulla?
>Vorrei dei chiarimenti su questo passaggio, perchè è la soluzione
>al mio problema.
Puoi per cortesia spiegarmi meglio quello che ti serve? Come è fatta la ricerca? Quali comportamenti vuoi ottenere?
--
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

siamodelgatto Profilo | Newbie

ho questa query SELECT * FROM [Catalogo] WHERE (([titolo] = @titolo OR @titolo IS NULL) AND ([autore] = @autore OR @autore IS NULL) AND ( [editore] = @editore OR @editore IS NULL) AND ([genere] = @genere OR @genere IS NULL) AND ([anno] = @anno OR @anno IS NULL) AND ([ISBN] = @ISBN OR @ISBN IS NULL))

io vorrei che l'utente potesse anche non specificare alcuni campi (textbox o droplist) ma attualmente la ricerca funziona solo se tutti campi vengono riempiti, cioè non ammette il campo vuoto!

alx_81 Profilo | Guru

>io vorrei che l'utente potesse anche non specificare alcuni campi
>(textbox o droplist) ma attualmente la ricerca funziona solo
>se tutti campi vengono riempiti, cioè non ammette il campo vuoto!
la condizione ti consente di fare ricerca comunque. Però probabilmente ti sta arrivando blank ('') e non NULL, che sono diversi.
Alla fine devi cercare di intervenire sul blank per passare il DBNull.Value in esecuzione.
Prova a fare debug e a controllare cosa realmente di arriva..

--
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

siamodelgatto Profilo | Newbie

si credo che il problema sia proprio questo, dovrei fare un controllo che imposti il campo di testo a NULL se è vuoto.

Un aiuto?

alx_81 Profilo | Guru

>si credo che il problema sia proprio questo, dovrei fare un controllo
>che imposti il campo di testo a NULL se è vuoto.
>Un aiuto?
hai provato a fare debug? Cosa usi per impostare e lanciare la query?

--
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

siamodelgatto Profilo | Newbie

per impostare la query uso questi parametri
<SelectParameters> <asp:ControlParameter ControlID="TextTitolo" Name="titolo" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="TextAutore" Name="autore" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="DropDownEditore" Name="editore" PropertyName="SelectedValue" Type="String" /> <asp:ControlParameter ControlID="DropDownGenere" Name="genere" PropertyName="SelectedValue" Type="String" /> <asp:ControlParameter ControlID="DropDownAnno" Name="anno" PropertyName="SelectedValue" Type="String" /> <asp:ControlParameter ControlID="TextISBN" Name="ISBN" PropertyName="Text" Type="String" /> </SelectParameters>

per lanciarla uso
<asp:Button ID="ButtonCerca" runat="server" Text="Cerca" onclick="ButtonCerca_Click" />

dove

protected void ButtonCerca_Click(object sender, EventArgs e) { }

e non capisco ancora come funzioni se è senza istruzioni all'interno...

alx_81 Profilo | Guru

>e non capisco ancora come funzioni se è senza istruzioni all'interno...
immaginavo.. controlli preimpostati

prova a gestire l'evento Selecting per fare debug controllando i valori che arrivano al datasource..
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.selecting.aspx


--
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

siamodelgatto Profilo | Newbie

ho un pò di difficoltà,

public event SqlDataSourceSelectingEventHandler Selecting { if(textbox.text=="") parameter1.Value = DBNull.Value; }

e poi
<asp:SqlDataSource................................ OnSelecting="SqlDataSourceSelectingEventHandler" />

potrebbe andare come soluzione?
in pratica effettuo il controllo prima della select.

Non funziona,un aiuto?
scusate l'ignoranza.

alx_81 Profilo | Guru

> parameter1.Value = DBNull.Value;
cos'è parameter1?
fammi vedere come hai definito il sqldatasource

>potrebbe andare come soluzione?
l'idea è quella ma non capisco se sbagli ad intervenire sul param, rispondi alle domande sopra..
ulteriori info qui: http://msdn.microsoft.com/it-it/library/w1kdt8w2.aspx
--
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

siamodelgatto Profilo | Newbie

in questo periodo ho fatto progressi nella mia applicazione web, ma questo problema non riesco ancora a risolverlo
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
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