// // // //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; }