none
Falla al querer cargar un Documento de Excel RRS feed

  • Pregunta

  • Buenos días tengo un sistema desarrollado en C# con MVC el cual estoy utilizando la funcion que coloco aqui para crear un archivo temporal y que ese archivo temporal pueda subir su contenido hacia una tabla del sql. El problema esta que si pruebo el sistema en otra computadora si me hace todo el proceso, pero en mi computadora lo pruebo y no lo realiza no se si le faltara algun driver a mi equipo para que funcione correctamente.

    Funcion #1

    string filename = Guid.NewGuid() + Path.GetExtension(Archivo.FileName);
                        string filepath = "/Archivos/Excel/" + filename;
                        Archivo.SaveAs(Path.Combine(Server.MapPath("/Archivos/Excel"), filename));
                        ProcessUploadNomina(filepath, filename, IdNomina);
                        ProcessTransferNomina(IdNomina);
                        ProcesoCopiarNomina(IdNomina);

    Funcion #2 que es la complementaria a esta para subir el archivo, en esta seccion cuando lo debugeo me llega asta el Econ.Open(); y de alli ya no pasa al Dataset.

     string fullpath = Server.MapPath("/Archivos/Excel/") + filename;
                    ValueExcelConn(fullpath);
                    string query = string.Format("Select CONS,NOMINA,FECHA,CONCEPTOGRALNOMINA,FUENTE,PARTIDA,CENTROCOSTO,DESCRIPCION,IMPORTE,EMPLEADO,CONCEPTOID,TIPONOMINA,CAPITULO,EVOLUTION,EP,0 as PROCESADO,'" + IdNomina + "' as IDNOMINA from [{0}]", "Evolution$");
                    OleDbCommand Ecom = new OleDbCommand(query, Econ);
                    Econ.Open();

                    DataSet ds = new DataSet();
                    OleDbDataAdapter oda = new OleDbDataAdapter(query, Econ);

                    Econ.Close();
                    oda.Fill(ds);

                    DataTable dt = ds.Tables[0];



    Jonathan Samayoa

    viernes, 6 de marzo de 2020 14:48

Respuestas

  • Lo resolvi cambiando el path de la siguiente manera en la cual agregaron Jet_OLEDB

    string constr = string.Format(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source={0};Jet OLEDB:Engine Type=5;Persist Security Info=False;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", filepath);


    Jonathan Samayoa

    lunes, 9 de marzo de 2020 17:09

Todas las respuestas

  • hola

    Entiendo se trata de un desarrollo web, quizas con asp.net, pero deberias mencionarlo


    >>pero en mi computadora lo pruebo y no lo realiza

    obtienes algun mensaje de error ?

    Como defines el conection string al excel? porque si usas las librerias a ACE puede que requiera instalar el Engine

     Microsoft Access Database Engine 2016 Redistributable

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 6 de marzo de 2020 15:10
  • Buenos días la conexion principal de todo mi sistema es sql, pero para hacer la carga de la información al sql lo realizo con oledb

                   

    using (SqlConnection con = new SqlConnection(ConexionM))
                {
                    string fullpath = Server.MapPath("/Archivos/Excel/") + filename;
                    ValueExcelConn(fullpath);
                    string query = string.Format("Select CONS,NOMINA,FECHA,CONCEPTOGRALNOMINA,FUENTE,PARTIDA,CENTROCOSTO,DESCRIPCION,IMPORTE,EMPLEADO,CONCEPTOID,TIPONOMINA,CAPITULO,EVOLUTION,EP,0 as PROCESADO,'" + IdNomina + "' as IDNOMINA from [{0}]", "Evolution$");

    EN ESTA SECCION ES DONDE REALIZO EL OLEDB E INCLUSO A MI MAQUINA YA LE INSTALE OLEDB Y NI CON ESO SE RESOLVIO

    OleDbCommand Ecom = new OleDbCommand(query, Econ);
                    Econ.Open();

                    DataSet ds = new DataSet();
                    OleDbDataAdapter oda = new OleDbDataAdapter(query, Econ);

                    Econ.Close();
                    oda.Fill(ds);

                    DataTable dt = ds.Tables[0];

                    try
                    {
                        SqlBulkCopy objbulk = new SqlBulkCopy(con);
                        objbulk.DestinationTableName = "darm_tblNOMINADEPASO";
                        objbulk.ColumnMappings.Add("CONS", "CONS");
                        objbulk.ColumnMappings.Add("NOMINA", "NOMINA");
                        objbulk.ColumnMappings.Add("FECHA", "FECHA");
                        objbulk.ColumnMappings.Add("CONCEPTOGRALNOMINA", "CONCEPTOGRALNOMINA");
                        objbulk.ColumnMappings.Add("FUENTE", "FUENTE");
                        objbulk.ColumnMappings.Add("PARTIDA", "PARTIDA");
                        objbulk.ColumnMappings.Add("CENTROCOSTO", "CENTROCOSTO");
                        objbulk.ColumnMappings.Add("DESCRIPCION", "DESCRIPCION");
                        objbulk.ColumnMappings.Add("IMPORTE", "IMPORTE");
                        objbulk.ColumnMappings.Add("EMPLEADO", "EMPLEADO");
                        objbulk.ColumnMappings.Add("CONCEPTOID", "CONCEPTOID");
                        objbulk.ColumnMappings.Add("TIPONOMINA", "TIPONOMINA");
                        objbulk.ColumnMappings.Add("CAPITULO", "CAPITULO");
                        objbulk.ColumnMappings.Add("EVOLUTION", "EVOLUTION");
                        objbulk.ColumnMappings.Add("EP", "EP");
                        objbulk.ColumnMappings.Add("PROCESADO", "PROCESADO");
                        objbulk.ColumnMappings.Add("IDNOMINA", "IDNOMINA");


    Jonathan Samayoa

    viernes, 6 de marzo de 2020 15:19
  • hola

    >>para hacer la carga de la información al sql lo realizo con oledb

    de donde sale Econ ?

    deberias atrapar el Exception con un try...catch y loguearlo o visualizarlo para ver la causa del fallo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 6 de marzo de 2020 18:50
  • Buenos días,

    Econ sale de la variable de conexión, lo que estaba verificando es que según cuando hago la conexion a Ole DB que lo hago de la siguiente manera no cuento con el complemento de access database engine 2007 ya que segun en lo que estoy colocando coloco Microsoft.ACE.OLEDB.12.0 lo cual hace referencia a access database engine 2007 y el que yo tengo es 2019.

    private void ValueExcelConn(string filepath)
            {
                      
                string constr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=           {0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""", filepath);
                Econ = new OleDbConnection(constr);
            }

     private void ProcessUploadNomina(string fileepath, string filename, string IdNomina)
            {
                using (SqlConnection con = new SqlConnection(ConexionMora))
                {
                    string fullpath = Server.MapPath("/Archivos/Excel/") + filename;
                    ValueExcelConn(fullpath);
                    string query = string.Format("Select CONS,NOMINA,FECHA,CONCEPTOGRALNOMINA,FUENTE,PARTIDA,CENTROCOSTO,DESCRIPCION,IMPORTE,EMPLEADO,CONCEPTOID,TIPONOMINA,CAPITULO,EVOLUTION,EP,0 as PROCESADO,'" + IdNomina + "' as IDNOMINA from [{0}]", "Evolution$");
                    OleDbCommand Ecom = new OleDbCommand(query, Econ);
                    Econ.Open();


                    OleDbDataAdapter oda = new OleDbDataAdapter(query, Econ);
                    oda.SelectCommand = Ecom;
                                   
                    DataSet ds = new DataSet();


                    Econ.Close();
                    oda.Fill(ds);

                    DataTable dt = ds.Tables[0];



                    
                    try
                    {
                        SqlBulkCopy objbulk = new SqlBulkCopy(con);
                        objbulk.DestinationTableName = "darm_tblNOMINADEPASO";
                        objbulk.ColumnMappings.Add("CONS", "CONS");
                        objbulk.ColumnMappings.Add("NOMINA", "NOMINA");
                        objbulk.ColumnMappings.Add("FECHA", "FECHA");
                        objbulk.ColumnMappings.Add("CONCEPTOGRALNOMINA", "CONCEPTOGRALNOMINA");
                        objbulk.ColumnMappings.Add("FUENTE", "FUENTE");
                        objbulk.ColumnMappings.Add("PARTIDA", "PARTIDA");
                        objbulk.ColumnMappings.Add("CENTROCOSTO", "CENTROCOSTO");
                        objbulk.ColumnMappings.Add("DESCRIPCION", "DESCRIPCION");


    Jonathan Samayoa

    lunes, 9 de marzo de 2020 14:30
  • Lo resolvi cambiando el path de la siguiente manera en la cual agregaron Jet_OLEDB

    string constr = string.Format(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source={0};Jet OLEDB:Engine Type=5;Persist Security Info=False;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", filepath);


    Jonathan Samayoa

    lunes, 9 de marzo de 2020 17:09