public static Tabella ToTabella(DataTable tab) { Tabella Ris = new Tabella(); foreach (DataColumn dc in tab.Columns) { Ris.Struct += dc.ColumnName + " "; switch (dc.DataType.ToString()) { case "System.Int32": Ris.Struct += "INT "; break; case "System.String": Ris.Struct += "NVARCHAR "; if (dc.MaxLength > -1) { Ris.Struct += "(" + dc.MaxLength.ToString() + ") "; } else { Ris.Struct += "(MAX) "; } break; case "System.Boolean": Ris.Struct += "BIT "; break; case "System.DateTime": Ris.Struct += "DATETIME "; break; case "System.Decimal": Ris.Struct += "DECIMAL "; break; } if (dc.AutoIncrement) { Ris.Struct += "IDENTITY "; } if (dc.Unique) { Ris.Struct += "PRIMARY KEY "; } if (dc.AllowDBNull) { Ris.Struct += "NULL "; } else { Ris.Struct += "NOT NULL "; } if (dc.DefaultValue.ToString().Length > 0) { Ris.Struct += "DEFAULT "; if (dc.DataType.ToString() == "System.String") { Ris.Struct += "'" + dc.DefaultValue.ToString() + "' "; } else { Ris.Struct += dc.DefaultValue.ToString(); } } Ris.Struct += '\t'; } Ris.Struct = Ris.Struct.Substring(0, Ris.Struct.Length - 1); foreach (DataRow dr in tab.Rows) { for (int i = 0; i < tab.Columns.Count; i++) { if ((tab.Columns[i].DataType.ToString() == "System.String") || (tab.Columns[i].DataType.ToString() == "System.Int32")) { Ris.Data += dr[i].ToString() + '\t'; } if (tab.Columns[i].DataType.ToString() == "System.Decimal") { Ris.Data += dr[i].ToString().Replace(',', '.') + '\t'; } if (tab.Columns[i].DataType.ToString() == "System.DateTime") { Ris.Data += Convert.ToDateTime(dr[i]).ToString("yyyyMMdd") + '\t'; } if (tab.Columns[i].DataType.ToString() == "System.Boolean") { if (Convert.ToBoolean(dr[i])) { Ris.Data += "1"; } else { Ris.Data += "0"; } Ris.Data += '\t'; } } Ris.Data = Ris.Data.Substring(0, Ris.Data.Length - 1); Ris.Data += '\n'; } if (Ris.Data.EndsWith("\n")) { Ris.Data = Ris.Data.Substring(0, Ris.Data.Length - 1); } Ris.Name = tab.TableName; return(Ris); }
public Ritorno RunProcedure(List <Tabella> Par) { Ritorno rit = new Ritorno(); BeginTransaction(); try { SqlCommand creaTabMex = new SqlCommand(_FunzioniBase.Properties.Resources.SqlCreaTabMex, cnn, Tran); SqlCommand creaTabTemp = new SqlCommand(_FunzioniBase.Properties.Resources.SqlCreaTabTemp, cnn, Tran); creaTabMex.ExecuteNonQuery(); creaTabTemp.ExecuteNonQuery(); SqlCommand insertInput = new SqlCommand("INSERT INTO #brn_input (Name,Data) Values (@Name,@Data)", cnn, Tran); foreach (Tabella t in Par) { insertInput.Parameters.Clear(); insertInput.Parameters.AddWithValue("@Name", t.Name); insertInput.Parameters.AddWithValue("@Data", t.Struct); insertInput.ExecuteNonQuery(); foreach (String s in t.Data.Split(new char[] { '\n' })) { insertInput.Parameters["@Data"].Value = s; insertInput.ExecuteNonQuery(); } } SqlCommand EseguiAzione = new SqlCommand("EXEC brn_sp_Azione", cnn, Tran); EseguiAzione.ExecuteNonQuery(); SqlCommand LeggiTabTemp = new SqlCommand(_FunzioniBase.Properties.Resources.SqlLeggiTabTemp, cnn, Tran); SqlDataReader reader = LeggiTabTemp.ExecuteReader(); DataTable ris = new DataTable(); ris.Load(reader); String NomeTabella = ""; _FunzioniBase.Tabella Tab = new Tabella(); foreach (DataRow dr in ris.Rows) { if (!(dr["Name"].ToString() == NomeTabella)) //se è una nuova tabella { if (Tab.Data.Length > 0) { Tab.Data.Substring(0, Tab.Data.Length - 1); } if (!(NomeTabella == "")) { AggiungiTabella(rit, Tab); } Tab = new Tabella(); Tab.Name = dr["Name"].ToString(); Tab.Struct = dr["Data"].ToString(); NomeTabella = dr["Name"].ToString(); } else { Tab.Data += dr["Data"].ToString() + '\n'; } } if (Tab.Data.Length > 0) { Tab.Data.Substring(0, Tab.Data.Length - 1); } AggiungiTabella(rit, Tab); SqlCommand DropTabTemp = new SqlCommand(_FunzioniBase.Properties.Resources.SqlDropTabTemp, cnn, Tran); } catch (Exception ex) { rit = new Ritorno(); rit.Errori.Add(ex.Message); } finally { if ((rit.Errori.Count == 0)) { if ((GetArg(Par, "IgnoraAvvisi") == "1")) { rit.Avvisi.Clear(); } if ((rit.Avvisi.Count == 0)) { CommitTransaction(); } else { RollbackTransaction(); } } else { RollbackTransaction(); } } return(rit); }