Oppure

Loading
17/02/22 15:22
Togo
Postato originariamente da Carlo:

Devi entrare in debug e vedere cosa succede nel for, controlla se le righe lette con le ripettive celle sono quelle che ti aspetti.
A occhio a parte delle ridondanze inutili, non vedo errori.


Grazie :)

Potresti spiegarmi cosa intendi quando dici " ricorda di inizializzare le colonne"?
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.

[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
17/02/22 22:15
Togo
Funziona, grazie mille :D