Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET]Consigli per database Relazionale con Parametri
Forum - C# / VB.NET - [VB.NET]Consigli per database Relazionale con Parametri

Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 18:35
Sabato, 27/08/2011
Ciao a tutti, ragazzi!
Sono andate bene le vacanze?
Sono ancora qui a stressarvi con vb!
Dunque, con Access ho creato un database con 2 tabelle.. Per semplificare, una tabella è "Personale" e contiene Nome, Cognome, Data Nascita e Mansione. Per la Mansione ho creato un'altra tabella, Mansioni, dove nel campo Tipo ho inserito "Dirigente", "Quadro", "Capo Reparto", "Operaio", "Manutentore" ecc. La relazione è di tipo 1 a molti: una persona ha 1 sola mansione. Dopo aver trafficato non poco sono riuscito a creare la mia query che mi restituisca una tabella con tutti i dati (con un RIGHT JOIN per recuperare il tipo di mansione e non l'ID).
Ora, dopo aver caricato i dati in una datatable gli ho inseriti in una listView settata a Details.
Quello che volevo fare ora era fare in modo che fosse possibile fare delle ricerche nel db del con l'uso dell'operatore Like. Ad esempio, imposto come parametro "nome" = "M", la query dovrebbe restituirmi tutti i dipendenti il cui nome comincia per 'M'. La mia query, fatta con Access è:
Codice sorgente - presumibilmente VB.NET

  1. PARAMETERS [@Nome] Text ( 255 ), [@Cognome] Text ( 255 );
  2. SELECT Dati.Cognome, Dati.Nome, Mansioni.Mansione FROM Mansioni RIGHT JOIN Dati ON Mansioni.ID_Mansioni=Dati.ID_Mansione
  3. WHERE (((Dati.Nome) Like [@Nome] & '%') AND ((Dati.Cognome) Like [@Cognome] & '%') AND ((Mansioni.Mansione) Like [@Mansione] & '%'));


Come vedete, nella query ci sono 3 parametri, @nome, @cognome, @mansione.
Ho il seguente codice:
Codice sorgente - presumibilmente VB.NET

  1. Dim Nome As String = ""
  2. Dim Cognome As String = ""
  3. Dim Mansione As String = ""
  4. If Not IsNothing(txtNome.Text) Then Nome = txtNome.Text
  5. If Not IsNothing(txtCognome.Text) Then Cognome = txtCognome.Text
  6. 'If Not IsNothing(txtMansione.Text) Then Mansione= txMansione.Text
  7.     conn.Open()
  8. Dim cmdQuery As New OleDbCommand With {.Connection = conn, CommandText =QueryRicerca", .CommandType=
  9. CommandType.StoredProcedure}
  10.  
  11. cmdQuery.Parameters.Add(New OleDbParameter With {.ParameterName = "@Nome", .OleDbType = OleDbType.Char, .Value = Nome})
  12. cmdQuery.Parameters.Add(New OleDbParameter With {.ParameterName = "@Cognome", .OleDbType = OleDbType.Char, .Value = Cognome})
  13.  cmdQuery.Parameters.Add(New OleDbParameter With {.ParameterName = "@Mansione", .OleDbType = OleDbType.Char, .Value = ""})
  14. Dim adapter As New OleDbDataAdapter With {.SelectCommand = cmdQuery}
  15.  Dim td As New DataTable


La mia domanda, molto.. banale, è... C'è un metodo migliore per fare questo??? Con i DB ci sono mille possibilità, che uno non sa neanche cosa scegliere...:_doubt:

Ultima modifica effettuata da Renny il 27/08/2011 alle 18:36


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 17:22
Domenica, 28/08/2011
Passando a Entity Framework potresti rendere tutto molto più semplice con l'uso di LINQ senza aver bisogno di usare query a basso livello, ma non esiste un provider ufficiale di Microsoft per gestire queste associazioni.
Puoi invece gestire meglio il tutto con LINQ to Dataset, applicandolo ai dataset sincronizzati con il database access.
Infine, soluzione molto più semplice ma anche molto più specifica, consiste nell'utilizzare un controllo BindingSource per filtrare l'accesso al database.

Ciao.. Ho un libro, dove è appunto citato questa novità del entry Framework, che permette di creare degli oggetti ricalcando l'organizzazione del db. Per ora sono in fase di sperimentazione e ho usato access perché lo conosco, ma potrei usare anche altri software per il mio db, che è vuoto (o quasi) - Renny - 28/08/11 19:54
Sto usando VIsual Studio 2010 Express.. Se carico il db con "origine dati", praticamente mi crea un oggetto dataset riferito al mio db. Poi come procedo, per fare le query e caricare i dati? C'è qualche guida? Grazie - Renny - 28/08/11 19:57
Dunque.. Ho ricreato il mio db con VS10 in formato mysql compact edition. Poi ho aggiunto "origine dati" mettendo entity Framework e mi ha fatto il mapping del DB. Non sono riuscito a convalidare la relazione e anche se scrivo delle query nn so come usare i dati.. :( - Renny - 28/08/11 23:48
Ora stiamo cambiando argomento, perciò apri un'altra discussione con i dettagli del problema - Il Totem - 29/08/11 10:46
Ho fatto un po' di prove.. Sostanzialmente il mio DB rimarrà piccolino, non si tratta certo di migliaia di record, quindi credo che Access possa andare bene. Quindi credo che la cosa migliore sia usare LINQ to Dataset. Ora ci lavoro, poi magari posto un po di codice in un altro thread. Grazie - Renny - 29/08/11 11:45


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM