Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Consiglio si interrogazione tabelle

    mi sto facendo una classe personalizzata per la connessione a un db mysql.
    devo creare i metodi che eseguono le query SELECT e che poi aggancio agli ObjectDataSource.
    io avrei usato i DataSet:
    codice:
            public static DataSet ddlNetwork()
            {
                MySqlDataAdapter adapter = null;
                DataSet ds = null;
                try
                {
                    DbManager.Istanza.takeConnection().Open();
                    adapter = new MySqlDataAdapter("SELECT * FROM entrate", DbManager.Istanza.takeConnection());
                    ds = new DataSet();
                    adapter.Fill(ds);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    ds.Dispose();
                    adapter.Dispose();
                }
                return ds;
            }
    ma da quanto nn è consigliato usarli come tipi di ritorno.
    che posso usare in alternativa??

  2. #2
    Effettivamente restituire i dati tramite DataSet non è il massimo dell'efficenza. Potresti usare una lista di oggetti in grado di memorizzare i dati che il database ti restituisce.
    Per esempio potresti fare questo : supponiamo che hai una tabella con due soli campi :
    id , nome , cognome. Prima di tutto crei una classe che possa memorizzare questi campi
    codice:
    public class person
    {
         // Propietà
         public int id { get; set; }
         public string nome{ get; set; }
         public string cognome { get; set; }
         // Costruttore vuoto
          public person(){}
          // Costrutore parametrizzato
         public person(int _id , string _nome , string _cognome)
         {
               this.id = _id;
               this.nome = _nome;
               this.cognome = _cognome;
         }
    }
    Dopo nella funzione che ti ritorna la lista di tutta le persone crei una funzione con questa
    dichiarazione
    codice:
              .
              .
    public List<person> GetPerson()
    {
           // recupera i dati dal databse
           List<person> tempList = new List<person>();
           // riempi la lista  e alla fine
           return tempList;
    
    }
    Ti ho fatto un esempio di massima. Ovviamente la lista la dovrai riempire il un ciclo
    dove leggi i records della tabella uno per uno ed ad ogni record crei un oggetto person
    con i dati dei campi recuperati dal db e aggiungi l'oggetto alla lista .
    Se hai problemi nel capire il codice fammi sapere. Ciao
    Sul mio blog qualche utile risorsa per JQuery, HTML5 , CSS3 , PHP , ASP.NET , WCF SERVICE REST & SOAP ed altro ancora http://zannino1973.wordpress.com

  3. #3
    intanto grazie per la risposta!

    no no il codice l'ho capito perchè uso lo stesso modo in un programma in java.
    quello che nn ho capito è come faccio a estrarre i dati e a passarli alla lista.
    questa è la classe che rappresenta la tabella entrate:
    codice:
    namespace MatteoFerrone
    {
        public class Entrate
        {
            public int id { get; set; }
            public decimal valore { get; set; }
            public int causale { get; set; }
            public int cont { get; set; }
            public string data { get; set; }
            public string note { get; set; }
    
            public Entrate(int id, decimal valore, int causale, int cont, string data, string note)
            {
                this.id = id;
                this.valore = valore;
                this.causale = causale;
                this.cont = cont;
                this.data = data;
                this.note = note;
            }
        }
    }
    poi nel metodo che esegue la query:
    codice:
            public List<Entrate> selectEntrate()
            {
                List<Entrate> list = new List<Entrate>();
                MySqlDataAdapter adapter = null;
                DataSet ds = null;
                try
                {
                    DbManager.Istanza.takeConnection().Open();
                    adapter = new MySqlDataAdapter("SELECT * FROM entrate", DbManager.Istanza.takeConnection());
                    ds = new DataSet();
                    adapter.Fill(ds);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    ds.Dispose();
                    adapter.Dispose();
                }
                return list;
            }
    devo usare cmq DataSet e DataAdapter o che altro per riempire la List??

  4. #4
    ho fatto così:
    codice:
            public List<Entrate> selectEntrate()
            {
                MySqlCommand cmd = new MySqlCommand("SELECT * FROM entrate", conn);
                MySqlDataReader reader = null;
                List<Entrate> list = new List<Entrate>();
                try
                {
                    reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        list.Add(new Entrate(reader.GetInt32("entrata_id"), reader.GetDecimal("entrata_valore"), reader.GetInt32("entrata_causale_id"), reader.GetInt32("entrata_conto_id"), reader.GetString("entrata_data"), reader.GetString("entrata_note")));
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    reader.Close();
                }
                return list;
            }
    usando un data reader.

  5. #5
    in asp.net va bene usare il datareader (meno memoria di un dataset e più veloce)

    la soluzione che hai adottato va bene.

    per info e se sei curisoso, ti invito eventualmente a leggere qualcosina su
    - dataset extension
    - linq to dataset

    il primo argomento parla appunto della nuova libreria di estensioni per dataset (e datatable) che ti permettono di avere nuovi metodi per lavorare meglio con i dati

    il secondo argomento utilizza questa libreria per effettuare query logiche con linq direttamente sulle tabelle.

    ciao

  6. #6
    grazie!
    adesso con un attimo di calma mi informo anche su questi due argomenti.

  7. #7
    Quello che hai fatto è esattamente quello che intendevo. Credo che la soluzione adottata da te sia la migliore. Come ti è stato suggerito potresti adottare anche linq. Ma se non hai tante tabelle e una varietà di query considerevoli non ti conviene.
    Sul mio blog qualche utile risorsa per JQuery, HTML5 , CSS3 , PHP , ASP.NET , WCF SERVICE REST & SOAP ed altro ancora http://zannino1973.wordpress.com

  8. #8
    eh però adesso mi ricordo perchè usavo un DataSet:
    codice:
    L'origine dati 'EntrateSource' non supporta l'ordinamento dei dati IEnumerable. L'ordinamento automatico è supportato solo con DataView, DataTable e DataSet.
    usando un oggetto business personale per rappresentare la tabella ho problemi con l'ordinamento nella gridview.
    voi sapete come si può fare??

  9. #9
    cosa gli passi al datasource della tabella? se gli passi una List<oggetto> non dovrebbe darti questo errore

    però mi viene un dubbio, forse devi implementare l'interfaccia IComparable nella tua classe oggetto.......
    mmmm, non ricordo bene, guardo un po di documentazione

  10. #10
    gli passo List<oggetto>
    penso tu abbia ragione.
    devo implementare quell'interfaccia e scrivermi un metodo per la comparazione.
    adesso provo.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.