none
Error : Se produjo una excepción de tipo 'System.NullReferenceException' RRS feed

  • Pregunta

  • Buenos y agradecido por su ayuda, me pueden ayudar indicando donde esta el error de mi aplicación: necesito hacer que un archivo importado csv se visualice en mi tabla html (si funcionaba ) pero también que los datos importados del csv se guarden en la tabla de mi base de datos de sql server, pero me salta un error al momento de ejecutar. Cuento con uds... Gracias

    Dejo captura del error y de mi código:

    using LeerCSV_MVC.Models;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace LeerCSV_MVC.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View(new List<CustomerModel>());
            }
    
    
    
            [HttpPost]
            public ActionResult Index(HttpPostedFileBase postedFile)
            {
    
    
                List<CustomerModel> customers = new List<CustomerModel>();
                string filePath = string.Empty;
                if (postedFile != null)
                {
                    string path = Server.MapPath("~/Uploads/");
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    filePath = path + Path.GetFileName(postedFile.FileName);
                    string extension = Path.GetExtension(postedFile.FileName);
                    postedFile.SaveAs(filePath);
                    //              string csvData = System.IO.File.ReadAllText(filePath);
    
                    //Create a DataTable.
                    DataTable dt = new DataTable();
                    dt.Columns.AddRange(new DataColumn[10] { new DataColumn("ProductID", typeof(int)),
                                    new DataColumn("ProductName", typeof(string)),
                                    new DataColumn("SupplierID", typeof(int)),
                                    new DataColumn("CategoryID", typeof(int)),
                                    new DataColumn("QuantityPerUnit", typeof(string)),
                                    new DataColumn("UnitPrice", typeof(float)),
                                    new DataColumn("UnitsInStock", typeof(int)),
                                    new DataColumn("UnitsOnOrder", typeof(int)),
                                    new DataColumn("ReorderLevel", typeof(int)),
                                    new DataColumn("Discontinued",typeof(int)) });
    
    
                    //Read the contents of CSV file.
                    string csvData = System.IO.File.ReadAllText(filePath);
    
                    //Execute a loop over the rows.
                    foreach (string row in csvData.Split('\n'))
                    {
                        if (!string.IsNullOrEmpty(row))
                        {
                            dt.Rows.Add();
                            int i = 0;
    
                            //Execute a loop over the columns.
                            foreach (string cell in row.Split(','))
                            {
                                dt.Rows[dt.Rows.Count - 1][i] = cell;
                                i++;
                            }
                        }
                    }
                    
                    string conString = ConfigurationManager.ConnectionStrings[@"Data Source=DESKTOP\MIINSTANCIA;Initial Catalog=North;Integrated Security="].ConnectionString;
                    using (SqlConnection con = new SqlConnection(conString))
                    {
                        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                        {
                            //Set the database table name.
                            sqlBulkCopy.DestinationTableName = "Products";
    
                            //[OPTIONAL]: Map the DataTable columns with that of the database table
                            //sqlBulkCopy.ColumnMappings.Add("Id", "CustomerId");
                            //sqlBulkCopy.ColumnMappings.Add("Name", "Name");
                            //sqlBulkCopy.ColumnMappings.Add("Country", "Country");
    
                            con.Open();
                            sqlBulkCopy.WriteToServer(dt);
                            con.Close();
                        }
                    }
    
                        foreach (string row in csvData.Split('\n'))
                        {
                            if (!string.IsNullOrEmpty(row))
                            {
                                customers.Add(new CustomerModel
                                {
                                    ProductID = row.Split(',')[0],
                                    ProductName = row.Split(',')[1],
                                    SupplierID = row.Split(',')[2],
                                    CategoryID = row.Split(',')[3],
                                    QuantityPerUnit = row.Split(',')[4],
                                    UnitPrice = row.Split(',')[5],
                                    UnitsInStock = row.Split(',')[6],
                                    UnitsOnOrder = row.Split(',')[7],
                                    ReorderLevel = row.Split(',')[8],
                                    Discontinued = row.Split(',')[9]
                                });
                            }
                        }
                    }
                    return View(customers);
                }
    
            }
        }


    Pedro JV


    • Editado Pedro JV lunes, 11 de diciembre de 2017 2:28
    lunes, 11 de diciembre de 2017 2:25

Todas las respuestas

  • La clase ConfigurationManager permite el acceso de manera simple al archivo de configuración, llámese web.config, donde entiendo, debes tener escrita la cadena de conexión dentro de la sección <connectionStrings>. Puedes recuperar la/una cadena de conexión indicando el nombre de la misma en la propiedad ConnectionStrings, nota que el error que cometes es que tú, en lugar del nombre, escribes la cadena de conexión completa. 

    Si aún no te has dado cuenta del error, revisa por favor el siguiente enlace: Propiedad ConfigurationManager.ConnectionStrings. Toma atención a los ejemplos que se encuentran al final de la página.

    lunes, 11 de diciembre de 2017 3:02
  • Leí su enlace y le agradezco mucho por la respuesta... Ya comprendí el error grande que estaba cometiendo.. Funcionó a la perfección..!! :D

    Pedro JV

    lunes, 11 de diciembre de 2017 4:11