public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { FuncionesGeneralesController FNCGrales = new FuncionesGeneralesController(); List <string> listaErrores = new List <string>(); IEnumerable <string> lineas = null; object respuesta = null; int totalProcesados = 0; int lineaActual = 2; bool status = false; string exception = "Error, se presento un error inesperado"; //DateTime fecha = new DateTime(); try { List <string> csvData = new List <string>(); using (StreamReader reader = new StreamReader(archivoCSV.InputStream, Encoding.Default)) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } lineas = csvData.Skip(1); totalProcesados = lineas.Count(); using (TransactionScope scope = new TransactionScope()) { foreach (string linea in lineas) { var lineaSplit = linea.Split(';'); if (lineaSplit.Count() == 12) { try { CostoFR CFR = new CostoFR(); CFR.TipoOperador = lineaSplit[0]; CFR.Operador = lineaSplit[1]; CFR.AcreedorSap = lineaSplit[2]; CFR.NombreProveedor = lineaSplit[3]; CFR.Moneda = lineaSplit[4]; CFR.Importe = Convert.ToDecimal(string.IsNullOrEmpty(lineaSplit[5]) ? "0" : lineaSplit[5]); // DateTime FechaInicio = FNCGrales.ConvierteFecha(lineaSplit[6], '/', "DMY"); CFR.Fecha_Inicio = lineaSplit[6]; // DateTime FechaFin = FNCGrales.ConvierteFecha(lineaSplit[7], '/', "DMY"); CFR.Fecha_Fin = lineaSplit[7]; CFR.CuentaR = lineaSplit[8]; CFR.SociedadGL = int.Parse(string.IsNullOrEmpty(lineaSplit[9]) ? "0" : lineaSplit[9]); CFR.TC = decimal.Parse(string.IsNullOrEmpty(lineaSplit[10]) ? "0" : lineaSplit[10]); CFR.Activo = 1; CFR.Id_LineaNegocio = lineaNegocio; db.CostoFR.Add(CFR); Log log = new Log(); log.insertaNuevoOEliminado(CFR, "Nuevo", "CostoFR.html", Request.UserHostAddress); } catch (FormatException) { listaErrores.Add("línea " + lineaActual + ": Campo con formato erróneo"); } } else { listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente."); } ++lineaActual; } db.SaveChanges(); scope.Complete(); exception = "Datos cargados con éxito"; status = true; } } catch (FileNotFoundException) { exception = "El archivo Selecionado aún no existe en el Repositorio."; status = false; } catch (UnauthorizedAccessException) { exception = "No tiene permiso para acceder al archivo actual."; status = false; } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32) { exception = "Falta el nombre del archivo, o el archivo o directorio está en uso."; status = false; } catch (TransactionAbortedException) { exception = "Transacción abortada. Se presentó un error."; status = false; } finally { respuesta = new { success = true, results = listaErrores, mensaje = exception, totalProcesados, status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }