Exemple #1
0
        //
        //
        //
        //FUNZIONE IMPORT DATABASE
        //
        //
        //


        public void updateDB(Tree albero)
        { 
            try
            {
                
                string comando = null;

                //Apertura connessione con Database "DB"
                SqlConnection myconn = new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=DB;server=(local)"); 

                //
                //inseriamo nome albero tipo, splitsize e depth
                //

                comando = string.Format("INSERT INTO Albero(Nome, Tipo, Split, Depth) VALUES('{0}','{1}', '{2}','{3}')", albero.name, albero.type, albero.splitSize, albero.depth); 

                //settiamo connessione
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = comando;
                cmd.Connection = myconn;

                //connessione
                myconn.Open();            
                //Query
                cmd.ExecuteNonQuery();
                //query su albero completata 


                //
                //occupiamoci degli attributi obbligatori di Vertex ed Edge 
                //

                comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "attr1Int", albero.getNome());
                //settiamo connessione
                cmd = new SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = comando;
                cmd.Connection = myconn;

                cmd.ExecuteNonQuery();
                //query completata 

                comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "attr2Int", albero.getNome());
                //settiamo connessione
                cmd = new SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = comando;
                cmd.Connection = myconn;

                cmd.ExecuteNonQuery();
                //query completata 


            //
            //Riempimento restanti attributi se e solo se sono stati scelti dall'utente 
            //


            for (int i = 0; i < albero.chiamato.Length; i++)
            {


                //
                //occupiamoci degli attributi di Vertex 
                //

                if (albero.chiamato[i] == 0) //controllo se attributo è stato chiamato da utente 
                {

                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "B", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 
                }

                if (albero.chiamato[i] == 1)
                {
                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "C", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 
                }

                if (albero.chiamato[i] == 2)
                {

                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "D", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 
                }

                if (albero.chiamato[i] == 3)
                {

                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "E", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();

                }


                //
                //occupiamoci degli attributi di Edge 
                //



                if (albero.chiamato[i] == 4)
                {

                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "G", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 

                }

                if (albero.chiamato[i] == 5)
                {
                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "H", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 

                }

                if (albero.chiamato[i] == 6)
                {
                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "I", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 

                }

                if (albero.chiamato[i] == 7)
                {

                    comando = string.Format("INSERT INTO AttrDef(Name, NomeAlbero) VALUES('{0}', '{1}')", "L", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query completata 
                }
            }



            //
            //occupiamoci degli AttrDefUid 
            //

            //saranno le chiavi univoche prese dal database 
            long chiaveAttr1Int = 0;
            long chiaveB = 0;
            long chiaveC = 0;
            long chiaveD = 0;
            long chiaveE = 0;
            long chiaveAttr2Int = 0;
            long chiaveG = 0;
            long chiaveH = 0;
            long chiaveI = 0;
            long chiaveL = 0;
            
            //i due array che tengono il nome dell'attributo e la chiave ad esso associata 
            string[] Attributi = new string[10];
            long[] chiavi = new long[10];


            long d = 0; //contatore che tiene la posizione degli array 
            long letti = 0; //contatore che tiene le linee lette dal database 

            comando = string.Format("SELECT AttrDefUid, Name FROM AttrDef WHERE NomeAlbero='{0}' ORDER BY Name ASC", albero.getNome());
            
            //settiamo connessione
            cmd = new SqlCommand();
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = comando;
            cmd.Connection = myconn;

            SqlDataReader msdr = cmd.ExecuteReader();
            while (msdr.Read())
            {
                chiavi[d] = msdr.GetInt32(0);
                Attributi[d] = msdr.GetString(1);
                d++;
                letti++; 
            }
            msdr.Close();

            //inserisco le chiavi nelle variabili 
            for (d = 0; d < letti; d++)
            {
                if (Attributi[d].Equals("attr1Int"))
                {
                    chiaveAttr1Int = chiavi[d];
                }

                if (Attributi[d].Equals("B"))
                {
                    chiaveB = chiavi[d];
                }

                if (Attributi[d].Equals("C"))
                {
                    chiaveC = chiavi[d];
                }

                if (Attributi[d].Equals("D"))
                {
                    chiaveD = chiavi[d];
                }

                if (Attributi[d].Equals("E"))
                {
                    chiaveE = chiavi[d];
                }

                if (Attributi[d].Equals("attr2Int"))
                {
                    chiaveAttr2Int = chiavi[d];
                }

                if (Attributi[d].Equals("G"))
                {
                    chiaveG = chiavi[d];
                }

                if (Attributi[d].Equals("H"))
                {
                    chiaveH = chiavi[d];
                }

                if (Attributi[d].Equals("I"))
                {
                    chiaveI = chiavi[d];
                }

                if (Attributi[d].Equals("L"))
                {
                    chiaveL = chiavi[d];
                }


            }




            //
            //Inseriamo con il for, per farlo in ogni vertice dell' albero!
            //


                long IdAlbero = 0; //futuro IdAlbero

                long EdgeUid = 0; //variabile che conterrà uno ad uno gli Id Edge presi in considerazione
                long VertexUid = 0; //variabile che conterrà uno ad uno gli Id Vertex presi in considerazione
               
                for (long i = 0; i < albero.albero.Length; i++) //for che scorre tutti i vertici 
                {
              

                    //
                    //occupiamoci dell'Id
                    //

                    comando = string.Format("SELECT Id FROM Albero WHERE Nome='{0}'", albero.getNome());
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    msdr = cmd.ExecuteReader();
                    if (msdr.Read())
                    {
                        IdAlbero = msdr.GetInt32(0); //Preleviamo l'IdAlbero 
                    }
                    msdr.Close();


                    //
                    //occupiamoci degli Edge 
                    //


                    comando = string.Format("INSERT INTO Edge(Valore, IdAlbero) VALUES({0}, {1})", albero.albero[i].arcoentrante.val, IdAlbero);
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query di valore e nome_albero si Edge[i] completata 



                    //
                    //occupiamoci dell'EdgeUid
                    //



                    comando = string.Format("SELECT EdgeUid FROM Edge WHERE IdAlbero={0} ORDER BY EdgeUid DESC", IdAlbero);
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    msdr = cmd.ExecuteReader();
                    if(msdr.Read())
                    {                   
                        EdgeUid = msdr.GetInt32(0); //Preleviamo l'EdgeUid                                          
                    }
                    msdr.Close();

                   
                    //
                    //occupiamoci dei valori di Vertex 
                    //


                    comando = string.Format("INSERT INTO Vertex(Name, Arcoentrante, IdAlbero) VALUES('{0}',{1},'{2}')", albero.albero[i].nome, EdgeUid, IdAlbero); 

                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    cmd.ExecuteNonQuery();
                    //query di nome, valore e nome_albero completata su albero[i]


                    //
                    //occupiamoci dei VertexUid 
                    //


                    comando = string.Format("SELECT VertexUid FROM Vertex WHERE IdAlbero={0} ORDER BY VertexUid DESC", IdAlbero);
                    //settiamo connessione
                    cmd = new SqlCommand();
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = comando;
                    cmd.Connection = myconn;

                    msdr = cmd.ExecuteReader();
                    if (msdr.Read())
                    {
                    VertexUid = msdr.GetInt32(0); //Preleviamo il VertexUid         
                    }                   
                                                                                           
                    msdr.Close();


                //
                //Occupiamoci di VertexAttrUsage 
                //


                comando = string.Format("INSERT INTO VertexAttrUsage(ObjectVUid, AttrDefUid, Value) VALUES({0}, {1}, '{2}')", VertexUid, chiaveAttr1Int, albero.albero[i].attr1Int);
                //settiamo connessione
                cmd = new SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = comando;
                cmd.Connection = myconn;

                cmd.ExecuteNonQuery();
                //query completata 


                comando = string.Format("INSERT INTO EdgeAttrUsage(ObjectEUid, AttrDefUid, Value) VALUES({0},{1},'{2}')", EdgeUid, chiaveAttr2Int, albero.albero[i].arcoentrante.attr2Int);
                //settiamo connessione
                cmd = new SqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = comando;
                cmd.Connection = myconn;

                cmd.ExecuteNonQuery();
                //query completata 


                //for che inserisce nel DB solo gli attributi chiamati dall'utente 
                for (int l = 0; l < albero.chiamato.Length; l++)
                {

                    if (albero.chiamato[l] == 0)
                    {
                        comando = string.Format("INSERT INTO VertexAttrUsage(ObjectVUid, AttrDefUid, Value) VALUES({0}, {1}, '{2}')", VertexUid, chiaveB, albero.albero[i].B);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }


                    if (albero.chiamato[l] == 1)
                    {

                        comando = string.Format("INSERT INTO VertexAttrUsage(ObjectVUid, AttrDefUid, Value) VALUES({0}, {1}, '{2}')", VertexUid, chiaveC, albero.albero[i].C);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }

                    if (albero.chiamato[l] == 2)
                    {
                        comando = string.Format("INSERT INTO VertexAttrUsage(ObjectVUid, AttrDefUid, Value) VALUES({0}, {1}, '{2}')", VertexUid, chiaveD, albero.albero[i].D);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }


                    if (albero.chiamato[l] == 3)
                    {

                        comando = string.Format("INSERT INTO VertexAttrUsage(ObjectVUid, AttrDefUid, Value) VALUES({0}, {1}, '{2}')", VertexUid, chiaveE, albero.albero[i].E);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                        //Query VertexAttrUsage completata 
                    }


                    //
                    //adesso EdgeAttrUsage
                    //


                    if (albero.chiamato[l] == 4)
                    {

                        comando = string.Format("INSERT INTO EdgeAttrUsage(ObjectEUid, AttrDefUid, Value) VALUES({0},{1},'{2}')", EdgeUid, chiaveG, albero.albero[i].arcoentrante.G);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }


                    if (albero.chiamato[l] == 5)
                    {

                        comando = string.Format("INSERT INTO EdgeAttrUsage(ObjectEUid, AttrDefUid, Value) VALUES({0},{1},'{2}')", EdgeUid, chiaveH, albero.albero[i].arcoentrante.H);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }



                    if (albero.chiamato[l] == 6)
                    {

                        comando = string.Format("INSERT INTO EdgeAttrUsage(ObjectEUid, AttrDefUid, Value) VALUES({0},{1},'{2}')", EdgeUid, chiaveI, albero.albero[i].arcoentrante.I);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 

                    }



                    if (albero.chiamato[l] == 7)
                    {

                        comando = string.Format("INSERT INTO EdgeAttrUsage(ObjectEUid, AttrDefUid, Value) VALUES({0},{1},'{2}')", EdgeUid, chiaveL, albero.albero[i].arcoentrante.L);
                        //settiamo connessione
                        cmd = new SqlCommand();
                        cmd.CommandType = System.Data.CommandType.Text;
                        cmd.CommandText = comando;
                        cmd.Connection = myconn;

                        cmd.ExecuteNonQuery();
                        //query completata 
                    }

                } //fine ciclo for array chiamato 

                } //fine ciclo for array vertici 


                //importazione in DB è stata completata

                myconn.Close(); //chiusura connessione


                //Riuscita compito
                MessageBox.Show("Update su database completato", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

            }
            catch (Exception ex2)
            {
                //fallimento compito 
                MessageBox.Show("ERRORE: " + ex2.Message);
                MessageBox.Show("Update su database non riuscito", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //Controllo errori 

            if (((this.textBox1.Text).Equals("")) || ((this.textBox2.Text).Equals("")) || ((this.textBox3.Text).Equals("")) || ((this.textBox4.Text).Equals("")))
            {
                MessageBox.Show("Campi mancanti", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return; 
            }

            //riempimento nome e Tipo albero 
            string nome = textBox1.Text;
            string Tipo = textBox2.Text;

            //riempimento SplitSize e depth 
            int splitSize, depth;

            if (!(int.TryParse(textBox3.Text, out splitSize)))
            {
                MessageBox.Show("Sono stati inseriti parametri non corretti", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return; 
            }

            if (!(int.TryParse(textBox4.Text, out depth)))
            {
                MessageBox.Show("Sono stati inseriti parametri non corretti", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;                 
            }


            //
            //Riempimento attributi 
            //
           

            //string[] attr = { "B","C","D","E","G","H","I","L" }; //attributi possibili
            bool[] check = { false, false, false, false, false, false, false, false }; //check si o no ?

            int[] chiamato = new int[8]; //i numeri qui riferiscono l'attributo checked dell'array attr tramite posizione 

            for(int i = 0; i < chiamato.Length; i++)
            {
                chiamato[i] = -1; 
            }

            int count = 0; //contatore di chiamato 


            //controllo checkbox Vertex 
            if(checkBox2.Checked)
            {
                check[0] = true;
                chiamato[count++] = 0; 
            }

            if (checkBox3.Checked)
            {
                check[1] = true;
                chiamato[count++] = 1;
            }

            if (checkBox4.Checked)
            {
                check[2] = true;
                chiamato[count++] = 2;
            }

            if (checkBox5.Checked)
            {
                check[3] = true;
                chiamato[count++] = 3;
            }


            //controllo checkbox Edge 
            if (checkBox9.Checked)
            {
                check[4] = true;
                chiamato[count++] = 4;
            }

            if (checkBox8.Checked)
            {
                check[5] = true;
                chiamato[count++] = 5;
            }

            if (checkBox7.Checked)
            {
                check[6] = true;
                chiamato[count++] = 6;
            }

            if (checkBox6.Checked)
            {
                check[7] = true;
                chiamato[count++] = 7;
            }


            //parametri corretti, determinazione checkbox scelti dall'utente terminata         
            //creazione instanza e salvataggio 

            Tree albero = new Tree(nome, Tipo, splitSize, depth);

            albero.chiamato = chiamato;

            albero.creaAlbero(); //crea fisicamente l'albero 

                     
            //
            //lavori su albero finiti, ora salvataggio l'albero in file .xml
            //
             
            saveFileDialog1.ShowDialog(); 
            
            //Se il nome del file da salvare non è una stringa vuota allora lo salvo 
            if (saveFileDialog1.FileName != "")
            {   
                //Serializzazione 
                var writer = new System.Xml.Serialization.XmlSerializer(typeof(Tree));
                var wfile = new System.IO.StreamWriter(saveFileDialog1.FileName);
                writer.Serialize(wfile, albero);
                wfile.Close();
                
                //Notifica salvataggio completato 
                MessageBox.Show("Salvataggio file completato", "GUI", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

                //chiusura Form creazione albero
                this.Dispose(); 
            }

        }
        public Tree riceviDB(string scelta)
        {
            Tree albero = new Tree(); //albero vuoto da riempire 


            //Setto connessione a database per ripescaggio dati 
            SqlConnection myconn = new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=DB;server=(local)"); 

            SqlCommand cmd = null; //il comand o di select 
            SqlDataReader myReader = null; //il lettore 

            //Tentativo di connessione al database
            myconn.Open(); 
            //connessione stabilita 


            //
            //ripesco nomealbero, tipo, split size, depth  
            //


            cmd = new SqlCommand(string.Format("SELECT * FROM Albero WHERE Nome='{0}'", scelta), myconn); //COMANDO SQL 
                             
            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            //Lettura dati dal database 
            if (myReader.Read()) //una sola volta 
            {
                albero.name = myReader.GetString(1);
                albero.type = myReader.GetString(2);
                albero.splitSize = myReader.GetInt32(3);
                albero.depth = myReader.GetInt32(4); 

            }



            // Chiude il DataReader		
            myReader.Close();

      
            //
            //lettura di numNodi  
            //

            long numVertex = 0; 
            cmd = new SqlCommand(string.Format("SELECT * FROM Albero, Vertex WHERE Albero.Nome='{0}' AND Vertex.IdAlbero=Albero.Id ", scelta), myconn); //COMANDO SQL 

            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            //Lettura dati dal database per scoprire lunghezza albero 
            while (myReader.Read()) 
            {
                numVertex++; //se leggo righe significa che ho vertici 
            }

            //ho scoperto il numero di vertici
            //creo l'albero di lunghezza giusta 
            albero.albero = new Vertex[numVertex];
            albero.numNodi = numVertex; 

 
            // Chiude il DataReader		
            myReader.Close();

              
            //
            //lettura dei vertex 
            //


            cmd = new SqlCommand(string.Format("SELECT Vertex.Name FROM Albero, Vertex WHERE Albero.Nome='{0}' AND Vertex.IdAlbero=Albero.Id ", scelta), myconn); //COMANDO SQL 

            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            int count = 0; 
            //Lettura dati dal database 
            while(myReader.Read()) 
            {
                albero.addVertex(new Vertex(count,count),count); 
                albero.albero[count].nome = myReader.GetString(0);
                count++; 
            }

            //Lettura dei vertex completata 

            // Chiude il DataReader		
            myReader.Close();

            //
            //lettura degli Edge 
            //

            cmd = new SqlCommand(string.Format("SELECT Edge.Valore FROM Albero, Edge WHERE Albero.Nome='{0}' AND Edge.IdAlbero=Albero.Id ", scelta), myconn); //COMANDO SQL 

            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            count = 0;
            //Lettura dati dal database 
            while (myReader.Read())
            {

                albero.albero[count].arcoentrante.val = myReader.GetInt32(0);
                count++; 
            }

            //Lettura degli Edge completata 

            // Chiude il DataReader		
            myReader.Close();


            //
            //Riempio attributi di Vertex 
            //

            cmd = new SqlCommand(string.Format("SELECT AttrDef.Name, Value FROM AttrDef, VertexAttrUsage, Vertex WHERE AttrDef.NomeAlbero='{0}' AND AttrDef.AttrDefUid=VertexAttrUsage.AttrDefUid AND Vertex.VertexUid=VertexAttrUsage.ObjectVUid", scelta), myconn); //COMANDO SQL 

            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            //Qui si prendono i dati giusti dal DB 
            count = 0;
            long contatore = numVertex; 
            //Lettura dati dal database 
            while (myReader.Read()) 
            {
               
                if ((myReader.GetString(0)).Equals("B"))
                {
                    if (count == albero.albero.Length) count--; //Serve a correggere l'errore che succede all'importazione dell'ultima riga dal DB, che fa finire OutOfBound l'array di Vertex 
                    albero.albero[count].B = myReader.GetString(1);                   
                }

                if ((myReader.GetString(0)).Equals("C"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].C = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("D"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].D = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("E"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].E = myReader.GetString(1);
                }


                if ((myReader.GetString(0)).Equals("attr1Int"))
                {
                    albero.albero[count].attr1Int = long.Parse(myReader.GetString(1));

                    contatore--;
                    count++;
                }

            }

            //Lettura completata 

            // Chiude il DataReader		
            myReader.Close();



            //
            //Riempio attributi di Edge 
            //

            cmd = new SqlCommand(string.Format("SELECT AttrDef.Name, Value FROM AttrDef, EdgeAttrUsage, Edge WHERE AttrDef.NomeAlbero='{0}' AND AttrDef.AttrDefUid=EdgeAttrUsage.AttrDefUid AND Edge.EdgeUid=EdgeAttrUsage.ObjectEUid", scelta), myconn); //COMANDO SQL 

            //setto un datareader sul comando appena eseguito             
            myReader = cmd.ExecuteReader();

            count = 0;

            contatore = numVertex;
            //Lettura dati dal database 
            while (myReader.Read()) 
            {


                if ((myReader.GetString(0)).Equals("G"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].arcoentrante.G = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("H"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].arcoentrante.H = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("I"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].arcoentrante.I = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("L"))
                {
                    if (count == albero.albero.Length) count--;
                    albero.albero[count].arcoentrante.L = myReader.GetString(1);
                }

                if ((myReader.GetString(0)).Equals("attr2Int"))
                {                    
                    albero.albero[count].arcoentrante.attr2Int = long.Parse(myReader.GetString(1));

                    count++;
                    contatore--; 
                }

               
            }

            //Lettura completata 

            // Chiude il DataReader		
            myReader.Close();




            //L'albero è stato ricreato

            // Chiusura connessione database 
            myconn.Close();


            //ritorno albero ricreato
            return albero; 

        }