99 messaggi dal 05 ottobre 2006
Ciao a tutti vorrei effettuare la ricerca di una data (di nascita) in un determinato range passato come parametro alla SP (data inizio e data fine)

La mia soluzione funzione correttamente l'unico problema è che se non inserisco nessun valore nei text box (datainizio e datafine), nessun elemento viene recuperato


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Ricerca_List]
@Cognome varchar(200),
@DataNascitaDa datetime=null,
@DataNascitaA datetime=null,
@CodiceComune int,
....
SELECT [Anag].*,
[Cognome] + ' ' + [Nome] AS CognomeNome,
[DescrizioneComune],[Provincia]
FROM [Anag]
INNER JOIN [Anag_Comuni] ON [Anag].[CodiceComune] = [Anag_Comuni].[CodiceComune]
WHERE [Anag].[Tipologia] = 'E'
AND (@Cognome = '' OR Cognome LIKE '%' + @Cognome + '%')
AND DataNascita BETWEEN @DataNascitaDa AND @DataNascitaA
AND (@CodiceComune = '' OR [Anag].CodiceComune = @CodiceComune)
...
ORDER BY [Anag].[Cognome] DESC





SqlCommand myCommand = new SqlCommand("....", dbconn);
myCommand.Parameters.Add(new SqlParameter("@Cognome", tbCognomeRicerca.Text));
myCommand.Parameters.Add(new SqlParameter("@DataNascitaDa", tbDataNascitaDaRicerca.Text));
myCommand.Parameters.Add(new SqlParameter("@DataNascitaA", tbDataNascitaARicerca.Text));
myCommand.Parameters.Add(new SqlParameter("@CodiceSesso", ddlSessoRicerca.SelectedValue));
myCommand.Parameters.Add(new SqlParameter("@CodiceStatoCivile", ddlStatoCivileRicerca.SelectedValue));
myCommand.Parameters.Add(new SqlParameter("@CodiceTipoPatenze", ddlPatenteRicerca.SelectedValue));
...

Cosa dovrei modificare per rendere la query funzionante sia nel caso in cui viene inserito un range sia nel caso in cui non viene inserito nessun elemento per quanto riguarda la data??

Grazie
Ciao, questa potrebbe essere una soluzione.
System.Data.SqlClient.SqlParameter parDataDa = new System.Data.SqlClient.SqlParameter();
            parDataDa .ParameterName = "@DataNascitaDa";
            parDataDa .DbType = DbType.Date;
            parDataDa .Value = tbDataNascitaDaRicerca.Text.Equals(String.Empty) ? DateTime.MinValue : Convert.ToDateTime(this.tbDataNascitaDaRicerca.Text);
            System.Data.SqlClient.SqlParameter parDataA = new System.Data.SqlClient.SqlParameter();
            parDataA.ParameterName = "@DataNascitaA";
            parDataA.DbType = DbType.Date;
            parDataA.Value = tbDataNascitaARicerca.Text.Equals(String.Empty) ? DateTime.MaxValue : Convert.ToDateTime(this.tbDataNascitaARicerca.Text);
            myCommand.Parameters.Add(parDataDa);
            myCommand.Parameters.Add(parDataA);
... 

Da testare...

Fabrizio Canevali
99 messaggi dal 05 ottobre 2006
Grazie mille per l'aiuto! Ma la SP come dovrebbe essere modificata?

Thanks
Ciao,

non devi modificare la stored.

il codice che ho postato non fa altro che verificare se i campi di input tbDataNascitaDaRicerca e tbDataNascitaARicerca sono valorizzati.

Se non lo sono passi alla stored DateTime.MinValue (1 gennaio 0001) e DateTime.MaxValue (31 dicembre 9999)

...
//DataDa
parDataDa .Value = tbDataNascitaDaRicerca.Text.Equals(String.Empty) ? DateTime.MinValue : Convert.ToDateTime(this.tbDataNascitaDaRicerca.Text); 
...
//DataA
parDataA.Value = tbDataNascitaARicerca.Text.Equals(String.Empty) ? DateTime.MaxValue : Convert.ToDateTime
...

se ti sembra piu leggibile puoi scrivere
...
if(tbDataNascitaDaRicerca.Text = "")
parDataDa.Value = DateTime.MinValue;
else
parDataDa.Value = Convert.ToDateTime(tbDataNascitaARicerca.Text); 
...

Fabrizio Canevali
99 messaggi dal 05 ottobre 2006
Grazie mille! Provo subito!

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.