Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072

    Filtro nella ricerca di elementi

    Ciao sto implementando un form per la ricerca di un testo e di un rage di
    date all'interno di una tabella, ho due problemini


    1) come posso effettuare la ricerca anche per testi simili: es Ros (per la
    ricerca di Rossi), so che devo aggiungere il simbolo % ma non capisco in che
    punto nel mio codice (sotto riportato)

    2) come posso introdurre una ricerca di un range di date (da ... a ...),
    facendo in modo che se la datainizio/datafine non sono valorizzate non venga
    applicato questo filtro (un po' come ho fatto per il cognome)


    DsDati = new DataSet();
    dbconn.Open();
    SqlCommand myCommand = new SqlCommand("Ricerca_List", dbconn);
    myCommand.Parameters.Add(new SqlParameter("@Cognome",
    tbCognomeRicerca.Text));
    myCommand.Parameters.Add(new SqlParameter("@DataInizio",
    tbDataInizio.Text));
    myCommand.Parameters.Add(new SqlParameter("@DatFine",
    tbDataFine.Text));
    myCommand.CommandType = CommandType.StoredProcedure;
    SqlDataAdapter DataAdatp = new SqlDataAdapter(myCommand);
    DataAdatp.Fill(DsDati, "Elenco");
    dbconn.Close();


    ALTER PROCEDURE [dbo].[Ricerca_List]
    @Cognome varchar(200),
    @DataInizio datetime,
    @DataFine datetime
    AS
    SELECT *
    FROM [Anag_Figure]
    WHERE (@Cognome = '' OR Cognome LIKE @Cognome)

    RETURN


    Grazie per l'aiuto!

  2. #2
    Per la domanda 1 prova a modificare la condizione di where nella stored procedure

    WHERE (@Cognome = '' OR Cognome LIKE @Cognome + '%')

    Fammi sapere
    Ciao
    K

    PS: per la 2 adesso ci penso..
    Kalman

  3. #3
    Utente di HTML.it L'avatar di NAREDA
    Registrato dal
    Oct 2002
    Messaggi
    25
    A parte i nomi il resto dovrebbe andar bene.

    a) where cognome like isnull(@cognome+'%',cognome)


    b) dt_inizio=isnull(@dt_inizio,dt_inizio)
    and dt_fine=isnull(@dt_fine,dt_fine)
    -ANDREA-

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    ciao,

    allora il trucco è nell' uso della funzione COALESCE

    colaesce(x,y) restituisce il primo valore non nullo fra x e y

    pertanto la query sara:
    set @cognome = @cognome + '%'


    where coalece(cognome,'') like @cognome
    and coalesce(dataInizio,@dataInizio) >=dataInizio
    and coalesce(dataFine,@dataFine) <=dataFine

    sposto questo, è pericoloso passare al parmeter un campo di tipo testo,
    ti conviene passare un oggetto DateTime, come dovrebbe essere.

    Ciao!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Grazie a tutti

    ho provato ma non riesco a gestire una ricerca in un range di date... la situazione è questa

    due textbox: dataDa dataA

    passo i due valori tramite parametri alla stored procedure che gestirà dua parametri del tipo:

    @DataInizio datetime
    @DataFine datetime

    a questo la SP dovrebbe:

    1) se non ho valorizzato i 2 textbox (o uno dei due) non considerare questa condizione della where

    2) se entrambi i textbox sono valorizzati cercare le date che appartengono a questo range


    Potresti farmi un semplice esempio??

    Grazie infinite!!

  6. #6
    Utente di HTML.it L'avatar di NAREDA
    Registrato dal
    Oct 2002
    Messaggi
    25
    ALTER PROCEDURE dbo.nome_stored
    @dt_inizio datetime =null,
    @dt_fine datetime=null,
    @altri parametri
    /* ***************************************
    Questi sopra sono i parametri da mettere nella stored e =null deve essere messo, in modo che se non passi quel parametro la stored funziona e prende il valore nullo
    --************** */


    select * from nometabella
    WHERE
    and dt_inizio <=isnull(@dt_inizio,dt_inizio) and
    (dt_fine >= isnull(@dt_fine,dt_fine) or dt_fine is null)
    /*************************
    in questo modo se ad esempio il @dt_inizio è null la 1° condizione where si annulla perchè diventa dt_inizio= dt_inizio (se stesso cioè sempre)
    prova e fammi sapere. */
    -ANDREA-

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.