Il giorno domenica 4 marzo 2012 16:07:55 UTC+1, Maurizio S. ha scritto:
> Sto iniziando ad interrogare le basi di dati in Visual Studio.NET.
>
Visto che stai iniziando, può anche andar bene la preistoria per imparare.
>
>
> Solitamente clicko col destro sul TableAdapter (nella finestra di
>
> progettazione del form) e creo la query tramite "Aggiungi query...".
>
>
Lascia perdere queste diavolerie automatiche, che non ti aiutano a capire la logica di programmazione
>
> Vorrei ora creare un form per effettuare la ricerca in una tabella, dove
>
> l'utente può valorizzare dei campi qualsiasi (ad es. soltanto il
>
> cognome, o soltanto il nome) e poi avviare la ricerca.
>
Dopo aver creato la form suppongo metterai un bottone cerca, non devi far altro che impostare il suo handler al click e catturati l'evento da code behind.
Eccoti un punto di partenza per la gestione eventi
http://www.techrepublic.com/article/working-with-events-in-c/1050284
>
>
> La query che ho creato è qualcosa del genere:
>
>
>
> SELECT * FROM t WHERE (cognome = @c) AND (nome = @n) AND ...
>
>
>
> Ora, se viene valorizzato soltanto il campo nome sul form, sarà eseguita
>
> una query del tipo:
>
>
>
> SELECT * FROM t WHERE (cognome = '') AND (nome = 'Maria') AND ...
>
>
>
> E questo porterà a risultati errati.
>
>
>
> Come faccio a fare in modo che la query eseguita sia questa:
>
>
>
> SELECT * FROM t WHERE (nome = @n) AND ...
>
>
>
> ?
>
>
>
> In alternativa, come poter inserire le wildcards nella query?
>
>
>
> Qualcosa come: WHERE (cognome = '%[@c]%')
>
>
>
> In questo modo, se anche il parametro @c è vuoto, non influirà sulla
>
> query.
>
>
>
> Preferirei però la prima soluzione, dato che per una condizione inutile
>
> come (cognome = '%%') magari il dbms si metterà a fare il confronto per
>
> ogni singolo record comunque, con relativo spreco di tempo e risorse.
>
>
>
> Devo per forza creare la query dinamicamente, da codice?
Ovviamente devi creare la query solo per quei campi che sono valorizzati nella form. Inoltre ti consiglio di non usare la concatenazione di stringhe che porta a query soggette a sql injection, ma usa gli sqlParameter. un buon punto di partenza lo trovi qui
http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C
>
>
>
> Saluti, m.