Visualizzazione dei risultati da 1 a 3 su 3

Discussione: c# Datareader e Array

  1. #1

    c# Datareader e Array

    salve sto cercando di migliorare questo pezzo di codice ma non riesco ad arrivare ad una soluzione più pulita....chiaramente sto imparando questo linguaggio da poco quindi non sono un mostro in questo linguaggio...il codice è il seguente:


    codice:
    public List<string>[] lettura(string sql,string val1="",string val2="")
            {
                
                List<string>[] list = new List<string>[2];
               
    
                if (val1 != "") { list[0] = new List<string>(); }
                if (val2 != "") { list[1] = new List<string>(); }
    
                objCmd = new OleDbCommand(sql, objConnection);
                try
                {
    
                    reader = objCmd.ExecuteReader();
                    while (reader.Read())
                    {
                        if (val1 != "") { list[0].Add(reader[val1] + ""); }
                        if (val2 != "") { list[1].Add(reader[val2] + ""); }
                    }
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                reader.Close();
                objConnection.Close();
                return list;
            }
    praticamente questo non fa altro che data una QUERY SELECT mettermi il risultato in uno o più array list, premetto che ho fatto questo pezzo di codice in modo da poter interrogare il db access in modo veloce in qualsiasi momento senza stare sempre a riscrivere la connessione ecc ecc... praticamente in questo modo ad esempio riesco ad avere nome e cognome di una persona:

    codice:
    List<string>[] list;
                list = leggigruppi.lettura("SELECT * FROM gruppi ","nome","cognome");
    
                for (int i = 0; i < list[0].Count; i++)
                {
                    comboBox3.Items.Add(list[0][i]);
                    comboBox2.Items.Add (list[1][i]);
                }
    ora il problema, il database non è formato solo da nome e cognome ma da molti altri campi che in qualsiasi momento potrebbero servirmi anche tutti insieme, e dal modo come sto procedendo io dovrei fare una schifezza del genere:

    codice:
    public List<string>[] lettura(string sql,string val1="",string val2="",string val3="",string val4="",string val5="")
            {
        
                List<string>[] list = new List<string>[2];
               
    
                if (val1 != "") { list[0] = new List<string>(); }
                if (val2 != "") { list[1] = new List<string>(); }
                if (val3 != "") { list[2] = new List<string>(); }
                if (val4 != "") { list[3] = new List<string>(); }
                if (val5 != "") { list[4] = new List<string>(); }
    
                objCmd = new OleDbCommand(sql, objConnection);
                try
                {
    
                    reader = objCmd.ExecuteReader();
                    while (reader.Read())
                    {
                        if (val1 != "") { list[0].Add(reader[val1] + ""); }
                        if (val2 != "") { list[1].Add(reader[val2] + ""); }
                        if (val3 != "") { list[2].Add(reader[val3] + ""); }
                        if (val4 != "") { list[3].Add(reader[val4] + ""); }
                        if (val5 != "") { list[4].Add(reader[val5] + ""); }
                    }
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                reader.Close();
                objConnection.Close();
                return list;
            }
    ecco praticamente aggiungento il numero di valori in entrara in questo caso sono arrivato a 5 e aggiungendo di conseguenza il numero di IF potrei operare su una tabella con massimo 5 campi...ma se volessi operare su tabelle con massimo 100 campi ?? il risultato sarebbe una pagina di codice lunghissima......

    Quindi vi chiedo come potrei ovviare a questo problema mantenendo questa tipologia di risultalto?
    Non puoi prendere quello che non vedi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao.
    Visto che sei ancora in fase di studio ti suggerisco di guardarti ado.net e tutti gli oggetti che offre per la gestione dei database. Io uso vb.net ma C# è analogo.
    Con ADO.NET puoi creare query parametriche, cioè invece di scrivere tu le condizioni in SQL ci pensano gli oggetti a creare le query nella sintassi corretta. Una volta fatto ciò per lavorare sui dati usa oggetti dataset o datatable, cioè delle vere e proprie tabelle su misura che contengono i dati richiesti.
    Un altro approccio molto valido è quello di aggiungere al tuo progetto un oggetto dataset che ti permette di lavorare sul database "scollegato" dal reale DB in access. In questo modo hai un oggetto con tante proprietà quante sono le colonne che ti servono e diventa molto agevole gestire i dati.
    Trovi tanti tanti esempi su google, ed è quasi divertente lavorare con strumenti così performarti e agevoli.
    Buono studio!

  3. #3
    Grazie del consiglio, avevo scartato a priori l'uso dei dataset perchè mi pareva un pò incasinato, prendendo la strada che poi hai visto sopra di scrivermi Sql a mano.....però ora provo a darli un'occhiata e vedo se riesco a capirci e a tirarci su qualcosa di buono.
    Non puoi prendere quello che non vedi.

Tag per questa discussione

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.