using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Reflection; using System.Data.SqlClient; using XMLExtractor; namespace XMLExtractor { public class Chapter { public string id { get; set; } public int idCapitolo { get; set; } public string titoloCapitolo { get; set; } // Scrive Tabella capitoli e Paragrafi (vuoti) public void writeDB(SqlConnection conn, TemplateStrutturaModelli templateStrutturaModelli) { // I capitoli di Immobiliare Monitoraggio su DB partono da 201 // I paragrafi di Immobiliare Monitoraggio su DB partono da 201 // I dati sono estratti dallXML con indice che parte da 1 int rowsUpdatedInserted = 0; string[] stringvalue = new string[2]{ "Capitoli", "Paragrafi"}; foreach (var value in stringvalue) { SqlCommand updInsCommand; SqlCommand cmdCount = new SqlCommand("SELECT count(*) from " + value + " WHERE ID = @ID", conn); cmdCount.Parameters.AddWithValue("@ID", Utility.CHIAVE_LAYOUT_CHAPTER + 200); int count = (int)cmdCount.ExecuteScalar(); string command = ((count > 0) ? "UPDATE " : "INSERT INTO ") + value + " "; // Se esiste, faccio l'update, altrimenti creo una nuova riga if (count > 0) command += "SET Descrizione = @descrizione WHERE ID = @ID"; else command += value.Equals("Capitoli") ? "(ID, Descrizione, RipetiOgniPagina) VALUES (@ID, @Descrizione, 1)" : "(ID, Nome, Descrizione) VALUES (@ID, @Nome, @Descrizione)"/*, WHERE ID = @ID"*/; updInsCommand = new SqlCommand(command); string Descrizione = "S" + Utility.CHIAVE_LAYOUT_CHAPTER + "." + this.titoloCapitolo + ".MonitoraggioImmobiliare"; updInsCommand.Parameters.AddWithValue("@ID", Utility.CHIAVE_LAYOUT_CHAPTER + 200);//this.idCapitolo + 200); if (value.Equals("Capitoli")) { updInsCommand.Parameters.AddWithValue("@Descrizione", Descrizione); templateStrutturaModelli.idCapitolo = Utility.CHIAVE_LAYOUT_CHAPTER + 200;//this.idCapitolo + 200; } else { updInsCommand.Parameters.AddWithValue("@Nome", Descrizione); updInsCommand.Parameters.AddWithValue("@Descrizione", "ParagrafoVuoto"); templateStrutturaModelli.idParagrafo = Utility.CHIAVE_LAYOUT_CHAPTER + 200;//this.idCapitolo + 200; } updInsCommand.Connection = conn; rowsUpdatedInserted = updInsCommand.ExecuteNonQuery(); if (rowsUpdatedInserted > 0 && value.Equals("Capitoli")) writeTestiDB(conn, templateStrutturaModelli); } Utility.CHIAVE_LAYOUT_CHAPTER++; } // Scrive in TestiCapitoli public void writeTestiDB(SqlConnection conn, TemplateStrutturaModelli templateStrutturaModelli) { SqlCommand updInsCommand; SqlCommand cmdCount = new SqlCommand("SELECT count(*) from TestiCapitoli WHERE IdCapitolo = @ID", conn); cmdCount.Parameters.AddWithValue("@ID", Utility.CHIAVE_LAYOUT_CHAPTER + 200);//this.idCapitolo + 200); int count = (int)cmdCount.ExecuteScalar(); // Se esiste, faccio l'update, altrimenti creo una nuova riga if (count > 0) { // UPDATE STATEMENT updInsCommand = new SqlCommand("UPDATE TestiCapitoli SET ID = @ID, IdReport = 11, idCapitolo = @idCapitolo, Testo1 = @testo1 WHERE IdCapitolo = " + this.idCapitolo + 124, conn); } else { // INSERT STATEMENT updInsCommand = new SqlCommand("INSERT into TestiCapitoli (ID, IdReport, idCapitolo, Testo1) VALUES (@ID, 11, @idCapitolo, @testo1)", conn); } // ID Report = 11 => 'Immobiliare Monitoraggio' updInsCommand.Parameters.AddWithValue("@ID", Convert.ToInt32(new SqlCommand("SELECT MAX(ID) FROM TestiCapitoli", conn).ExecuteScalar()) + 1); updInsCommand.Parameters.AddWithValue("@idCapitolo", Utility.CHIAVE_LAYOUT_CHAPTER + 200);//this.idCapitolo + 200); updInsCommand.Parameters.AddWithValue("@testo1", this.titoloCapitolo); int rowsUpdatedInserted = updInsCommand.ExecuteNonQuery(); if (rowsUpdatedInserted > 0) writeChiaveLayoutDB(conn, templateStrutturaModelli); } // Scrive in ClassiLayout le chiavi layout dei Capitoli public void writeChiaveLayoutDB(SqlConnection conn, TemplateStrutturaModelli templateStrutturaModelli) { SqlCommand updInsCommand; SqlCommand cmdCount = new SqlCommand("SELECT count(*) from ClassiLayout WHERE IdChiaveLayout = @idChiaveLayout", conn); cmdCount.Parameters.AddWithValue("@idChiaveLayout", Utility.CHIAVE_LAYOUT_CHAPTER + 3000);//this.idCapitolo + 3000); updInsCommand = new SqlCommand("INSERT into ClassiLayout (IdChiaveLayout, Classe, Namespace, Descrizione) VALUES (@idChiaveLayout, " + "@classe, @NameSpace, @Descrizione)", conn); if (!this.titoloCapitolo.Contains("Indice")) { updInsCommand.Parameters.AddWithValue("@IdChiaveLayout", Utility.CHIAVE_LAYOUT_CHAPTER + 3000);//this.idCapitolo + 3000); updInsCommand.Parameters.AddWithValue("@classe", "S" + Utility.CHIAVE_LAYOUT_CHAPTER);//this.idCapitolo); updInsCommand.Parameters.AddWithValue("@NameSpace", "Consulenza.ReportWriter.Manager.Chapter.Immobiliare.Monitoraggio"); updInsCommand.Parameters.AddWithValue("@Descrizione", "S" + Utility.CHIAVE_LAYOUT_CHAPTER + "." + this.titoloCapitolo + " - Immobiliare Monitoraggio"); } else { updInsCommand.Parameters.AddWithValue("@IdChiaveLayout", Utility.CHIAVE_LAYOUT_CHAPTER + 3000);//this.idCapitolo + 3000); updInsCommand.Parameters.AddWithValue("@classe", "S" + this.idCapitolo);//this.idCapitolo); updInsCommand.Parameters.AddWithValue("@NameSpace", "Consulenza.ReportWriter.Manager.Chapter.Immobiliare.Monitoraggio"); updInsCommand.Parameters.AddWithValue("@Descrizione", "S" + this.idCapitolo + "." + this.titoloCapitolo + " - Immobiliare Monitoraggio"); } templateStrutturaModelli.capitoloChiaveLayout = Utility.CHIAVE_LAYOUT_CHAPTER + 3000;////this.idCapitolo + 3000; int rowsUpdatedInserted = updInsCommand.ExecuteNonQuery(); } public List getProperties() { List properties = new List(); ChartMediaDeiPrezzi objectChart = new ChartMediaDeiPrezzi(); foreach (var prop in objectChart.GetType().GetProperties()) { properties.Add(prop.Name.ToLower()); } properties.Remove("idcapitolo"); return properties; } public static void writeChapter(XmlNode attribute, List tagList, string nextTag, Data data) { Chapter chapter = new Chapter(); foreach (XmlNode attr in attribute.ChildNodes) if (!tagList.Contains(attr.Name.ToString())) { PropertyInfo propertyInfo = chapter.GetType().GetProperty(attr.Name); propertyInfo.SetValue(chapter, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null); } else ReadXML.extractTag(attr, nextTag); chapter.idCapitolo = ReadXML.idCapitolo; data.chapterList.Add(chapter); chapter = new Chapter(); ReadXML.idCapitolo++; } } }