17/02/22 21:48
Carlo
quando dichiari un DataTable non ha righe e non ha colonne, prima di aggiungere una riga composta da più celle, bisogna creare le colonne e lo hai fatto a riga 29, 30 ,31
Il post precedente dove ti ho dato istruzioni, conteneva un errore di sintassi ho scritto Row invece di Rows, ma conteneva anche un errore di concetto, non si può assegnare la riga di una tabella ad un'altra ma va importata.
Ti invio il codice che importa la riga nei nuovi DataTable dtOk e dtErr da dt
Ho anche eliminato le ridondanze e corretto la verifica con la data, come avevi fatto tu doveva contenere anche l'ora.
Assumo che dt, sia correttamente caricato con i valori presenti, lo puoi verificare con il debug, le stringe DATA_INSERIMENTO, DATA_INIZIO e DATA_FINE devono contenere le rispettive date, giuste o errate che siano, altrimenti è inutile continuare.
Il codice seguente testato è solo quello relativo al ciclo di controllo, il codice precedente e successivo resta invariato e non ho possibilità di verificarne la correttezza.
Il post precedente dove ti ho dato istruzioni, conteneva un errore di sintassi ho scritto Row invece di Rows, ma conteneva anche un errore di concetto, non si può assegnare la riga di una tabella ad un'altra ma va importata.
Ti invio il codice che importa la riga nei nuovi DataTable dtOk e dtErr da dt
Ho anche eliminato le ridondanze e corretto la verifica con la data, come avevi fatto tu doveva contenere anche l'ora.
Assumo che dt, sia correttamente caricato con i valori presenti, lo puoi verificare con il debug, le stringe DATA_INSERIMENTO, DATA_INIZIO e DATA_FINE devono contenere le rispettive date, giuste o errate che siano, altrimenti è inutile continuare.
Il codice seguente testato è solo quello relativo al ciclo di controllo, il codice precedente e successivo resta invariato e non ho possibilità di verificarne la correttezza.
[HttpPost] public ActionResult Index(HttpPostedFileBase file) { DataTable dt = new DataTable(); DataTable dtOk = new DataTable(); DataTable dtErr = new DataTable(); if (file != null && file.ContentLength > 0 && System.IO.Path.GetExtension(file.FileName).ToLower() == ".xlsx") { string path = Path.Combine(Server.MapPath("~/UploadFile"), Path.GetFileName(file.FileName)); file.SaveAs(path); using (XLWorkbook workbook = new XLWorkbook(path)) { IXLWorksheet worksheet = workbook.Worksheet(1); bool FirstRow = true; string readRange = "1:1"; foreach (IXLRow row in worksheet.RowsUsed()) { if (FirstRow) { readRange = string.Format("{0}:{1}", 1, row.LastCellUsed().Address.ColumnNumber); foreach (IXLCell cell in row.Cells(readRange)) { dt.Columns.Add(cell.Value.ToString()); dtOk.Columns.Add(cell.Value.ToString()); dtErr.Columns.Add(cell.Value.ToString()); } FirstRow = false; } else { dt.Rows.Add(); int cellIndex = 0; foreach (IXLCell cell in row.Cells(readRange)) { dt.Rows[dt.Rows.Count - 1][cellIndex] = cell.Value.ToString(); cellIndex++; } } } if (FirstRow) { ViewBag.Message = "Empty Excel File!"; } } } else { ViewBag.Message = "Please select file with .xlsx extension!"; } string connection = "Data Source=(localDb)\LocalDb;Initial Catalog=ExcelDataBaseReader;Integrated Security=True"; SqlConnection con = new SqlConnection(connection); SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con); sqlBulkCopy.DestinationTableName = "tbl_ProgettiSociali2"; // codice corretto --------------------------------------------------- for (int i = 0; i < dt.Rows.Count; i++) { int j = 0; //string ANNO = dt.Rows[i]["ANNO"].ToString(); //string NRPROTOCOLLO = dt.Rows[i]["NRPROTOCOLLO"].ToString(); //string TIPOLOGIA = dt.Rows[i]["TIPOLOGIA"].ToString(); //string STATO = dt.Rows[i]["STATO"].ToString(); //string AMBITO_DINTERVETO = dt.Rows[i]["AMBITO D'INTERVENTO"].ToString(); //string SOGGETTI_DESTINATARI = dt.Rows[i]["SOGGETTI DESTINATARI"].ToString(); //string TITOLO_INIZIATIVA = dt.Rows[i]["TITOLO INIZIATIVA"].ToString(); string DATA_INSERIMENTO = dt.Rows[i]["DATA INSERIMENTO"].ToString(); DateTime datetime_DATA_INSERIMENTO; if (DateTime.TryParse(DATA_INSERIMENTO, out datetime_DATA_INSERIMENTO)) j++; string DATA_INIZIO = dt.Rows[i]["DATA INIZIO(GG/MM/AAAA)"].ToString(); DateTime datetime_DATA_INIZIO; if (DateTime.TryParse(DATA_INIZIO, out datetime_DATA_INIZIO)) j++; string DATA_FINE = dt.Rows[i]["DATA FINE(GG/MM/AAAA)"].ToString(); DateTime datetime_DATA_FINE; if (DateTime.TryParse(DATA_FINE, out datetime_DATA_FINE)) j++; if (j == 3) dtOk.ImportRow(dt.Rows[i]); else dtErr.ImportRow(dt.Rows[i]); } //-------------------------------------------------------------- con.Open(); sqlBulkCopy.WriteToServer(dtOk); con.Close(); //sqlBulkCopy.WriteToServer(dt) return View(dtErr); }
Ultima modifica effettuata da Carlo 18/02/22 5:47
in programmazione tutto è permesso