|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Registered User
Iscritto dal: Nov 2007
Città: Firenze
Messaggi: 15
|
[C#] Database & Select
Sto provando a recuperare valori di un Database da C#.
Mi sono venuti un po' di dubbi sul modo in cui ho fatto il tutto. Codice:
public string selezionaNome() { SQLiteConnection connessione; SQLiteDataAdapter dataadapter; DataSet dataset = new DataSet(); using (connessione = new SQLiteConnection()) { try { connessione.Open(); using (dataadapter = new SQLiteDataAdapter("SELECT Nome FROM Persone", connessione)) { dataadapter.Fill(dataset, "Nomi"); } } catch (Exception e) { MessageBox.Show(e.ToString()); } } string nome = null; foreach (DataTable dt in dataset.Tables) { foreach (DataRow dr in dt.Rows) { foreach (DataColumn dc in dt.Columns) { nome = (string)dr["nome"]; } } } return nome; } mi sembra un po' troppo contorto/scorretto fare così per recuperare un solo valore anche se funzionante. Esiste un modo migliore? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
|
se devi solamente recuperare dati usa un datareader invece di un dataadapter che riempie un dataset o una datatable
'iao |
![]() |
![]() |
![]() |
#3 | |
Registered User
Iscritto dal: Nov 2007
Città: Firenze
Messaggi: 15
|
Quote:
![]() --- Se invece dovessi restituire un insieme di righe è corretto/efficace restituire un ArrayList?? Codice:
public ArrayList elencaPersone() { ArrayList elencopersone = new ArrayList(); SQLiteConnection connessione; SQLiteCommand command; SQLiteDataReader datareader; string nome = null; string cognome = null; using (connessione = new SQLiteConnection()) { try { connessione.ConnectionString = ConnessioneDatabase.DBSOURCE; connessione.Open(); using (command = new SQLiteCommand( "SELECT * FROM PERSONE,connessione)) { using (datareader = command.ExecuteReader()) { if(datareader.HasRows) while (datareader.Read()) { nome = datareader.GetString(datareader.GetOrdinal("NOME")); cognome = datareader.GetString(datareader.GetOrdinal("COGNOME")); Persona c = new Persona(nome,cognome); elencopersone.Add(c); } } } } catch (Exception e) { MessageBox.Show(e.ToString()); } } return elencopersone; } |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
|
vara, ti dico come io di solito imposto la questione (e di sicuro ci sono modi migliori
![]() ho una sola classe che interagisce con il database occupandosi di connection, command e via dicendo ed espone i metodi essenziali ad esempio
ad esempio avrò una classe UtenteDALC (DALC sta per Data Access Logic Component) che esporrà (sempre ad esempio) il metodo
Fatto questo, con i dati che legge dal DataReader restituitogli istanzia tanti oggetti UtenteBE quanti sono i record risultanti dalla query e li inserisce nella LinkedList che restituirà al suo chiamante. In questo modo separi il livello che si occupa dell'accesso ai dati da tutto il resto del sistema. Per questo mi sembra abbastanza flessibile e inoltre la maggior parte del codice che scrivi è riutilizzabile. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Dec 2007
Messaggi: 2
|
Il concetto esposto da 0rph3n è stato fra l'altro esposto e materializzato da Microsoft nel LINQ attualmente utilizzabile nell'ultima versione del framework.
Prova a darci un occhiata, è una vera rivoluzione in questo senso. ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:12.