Consiglio sulla ricerca dei dati in un database

venerdì 27 aprile 2007 - 07.17

trinity Profilo | Guru

salve ragazzi,
ho creato un applicativo che si collega ad un databse installato su un server remoto. Il database è di tipo sql server 2005.
Nel database c'è una tabella nazioni. Nell'applicativo su determinate textbox io faccio la ricerca nell'evento keyup delle nazioni e dei comuni presenti in archivio.
Ecco un codice di esempio:

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

ovviamente le ricerche avvengono tutte con delle stored che si trovano sul server dove è installato il db.

Solo che facendo dei test stavo notanto che quando vado a digitare lettera per lettera della nazione per esempio, la compilazione della parole avviene in maniera lenta in quanto per ogni lettera che io digito avviene la ricerca nell'archivio.

Per farvi capire meglio vi posto il codice che richiama la stored delle nazioni:

Public Function CaricaRec(ByVal ObjNazione As PropertyNazioni) As PropertyNazioni Dim oNazione As PropertyNazioni = New PropertyNazioni Try SqlCmd.CommandText = "GetNazione" SqlCmd.Parameters.Add("@Nazione", SqlDbType.VarChar).Value = ObjNazione.Nazione SqlCmd.Connection = Db SqlCmd.CommandType = CommandType.StoredProcedure SqlDr = SqlCmd.ExecuteReader If SqlDr.Read() Then oNazione.Nazione = SqlDr.GetSqlString(0).Value() oNazione.CodNazione = SqlDr.GetSqlString(1).Value End If Return oNazione Catch ex As Exception Throw ex Finally SqlDr.Close() SqlCmd.Parameters.Clear() SqlCmd.Dispose() End Try End Function

mentre questa è la stored vera e propria:

ALTER PROCEDURE [dbo].[GetNazione] ( @Nazione Varchar(250) ) AS BEGIN IF @Nazione IS NULL OR LEN(@Nazione) = 0 Select nazione,Codnazione From dbo.Nazioni Where 1 = 0 ELSE Select nazione,Codnazione From dbo.Nazioni Where nazione LIKE @Nazione + N'%' END

a questo punto capita un pò la mia problematica mi consigliate sempre questo metodo che sto utilizzando oppure non utilizzo la gestione della ricerca sul keyup ma bensì faccio scrivere la nazione e durante il passaggio al campo successivo faccio il controllo sul database per vedere se esiste la nazione digitata?

Accetto anche vostre info o consigli.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

sanbiz Profilo | Senior Member

>a questo punto capita un pò la mia problematica mi consigliate
>sempre questo metodo che sto utilizzando oppure non utilizzo
>la gestione della ricerca sul keyup ma bensì faccio scrivere
>la nazione e durante il passaggio al campo successivo faccio
>il controllo sul database per vedere se esiste la nazione digitata?

Un paio di domande/soluzioni: non sarebbe più performante caricare l'elenco delle nazioni (che non è poi così esteso) in una combo e a questo punto utilizzare il completamento automatico della stessa?
In questo modo le verifiche sulll'esistenza della nazione avvengono lato client (il valore deve essere contenuto nella combo) e lato server ci accedi sono una volta.
Oppure, la tua verifica tramite sp non potresti farla solo se l'utente preme ad esempio il tasto Invio o, sulla validate della combo (o a questo punto della textbox)?
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

trinity Profilo | Guru

>>a questo punto capita un pò la mia problematica mi consigliate
>>sempre questo metodo che sto utilizzando oppure non utilizzo
>>la gestione della ricerca sul keyup ma bensì faccio scrivere
>>la nazione e durante il passaggio al campo successivo faccio
>>il controllo sul database per vedere se esiste la nazione digitata?
>
>Un paio di domande/soluzioni: non sarebbe più performante caricare
>l'elenco delle nazioni (che non è poi così esteso) in una combo
>e a questo punto utilizzare il completamento automatico della
>stessa?

cioè tu intendi dire che carico nella combo tutte le nazioni e poi faccio sull'evento keyup il completamento che stavi dicendo tu modificando il mio codice?

Oppure se non è così cosa intendevi dire per completamento automatico della combo e come si fa?

>In questo modo le verifiche sulll'esistenza della nazione avvengono
>lato client (il valore deve essere contenuto nella combo) e lato
>server ci accedi sono una volta.
>Oppure, la tua verifica tramite sp non potresti farla solo se
>l'utente preme ad esempio il tasto Invio o, sulla validate della
>combo (o a questo punto della textbox)?


ipotesi che stavo pensando ma se dovessero però passare (come molte persone poco competenti fanno) da una textbox all'altra con il clic del mouse allora il controllo sulla validate andrebbe perso oppure posso fare un ulteriore controllo?
>--
>Sandro Bizioli
>http://blogs.dotnethell.it/sandro/

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

sanbiz Profilo | Senior Member

>cioè tu intendi dire che carico nella combo tutte le nazioni
>e poi faccio sull'evento keyup il completamento che stavi dicendo
>tu modificando il mio codice?

A questo punto passiamo dal lato server al lato client e vediamo che linguaggio utilizzi: vb6, vb.net, altro?
In ambiente vb le combobox hanno già la funzione di completamento autobmatico, vale a dire che una volta popolare se scrivi qualche cosa nella combo essa cerca il valore più simile alla parte digitata.
In caso di altri linguaggi penso non cambi molto.

>ipotesi che stavo pensando ma se dovessero però passare (come
>molte persone poco competenti fanno) da una textbox all'altra
>con il clic del mouse allora il controllo sulla validate andrebbe
>perso oppure posso fare un ulteriore controllo?

Non va perso; l'evento validate si genera proprio quando avviene la validazione del dato al suo interno (tipo un lostfocus) quindi anche quando clicchi su un'altra textbox.

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

trinity Profilo | Guru

>>cioè tu intendi dire che carico nella combo tutte le nazioni
>>e poi faccio sull'evento keyup il completamento che stavi dicendo
>>tu modificando il mio codice?
>
>A questo punto passiamo dal lato server al lato client e vediamo
>che linguaggio utilizzi: vb6, vb.net, altro?

utilizzo vb net 2005

mi ero dimenticato se hai visto il mio codice postato sul primo post e precisamente sull'evento keyup io oltre a dover caricare il nome della nazione in un campo textbox, carico in un altro campo il codice della nazione che lo prendo nel database, se seguiamo la tua logica come faccio a selezionare il tutto...

allora mi è venuto in mente questo e se prima di aprire la form carico tutta la lista delle nazioni con i rispettivi codici un una tabella di un dataset e poi lavoro su di essa? se non erro dovrebbe funzionare come se stessi lavorando una una tebella di un db o sbaglio?



>In ambiente vb le combobox hanno già la funzione di completamento
>autobmatico, vale a dire che una volta popolare se scrivi qualche
>cosa nella combo essa cerca il valore più simile alla parte digitata.
>In caso di altri linguaggi penso non cambi molto.
>
>>ipotesi che stavo pensando ma se dovessero però passare (come
>>molte persone poco competenti fanno) da una textbox all'altra
>>con il clic del mouse allora il controllo sulla validate andrebbe
>>perso oppure posso fare un ulteriore controllo?
>
>Non va perso; l'evento validate si genera proprio quando avviene
>la validazione del dato al suo interno (tipo un lostfocus) quindi
>anche quando clicchi su un'altra textbox.

ottimo grazie per questa info

>--
>Sandro Bizioli
>http://blogs.dotnethell.it/sandro/

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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