none
problema al insertar registros con aspnet y sqlserver RRS feed

  • Pregunta

  • Buenas tardes, estoy haciendo un proyecto que lee archivos excel y los registra en una BD, pero tengo un problema, cuando son cantidades grandes de rows que insertar se salta algunas lineas y no las registra.

    he investigado y me gustaria crear un store procedure que reciba un archivo xml con todos esos registros. Crei haberlo logrado pero al revisar la BD tengo los registros pero todos con valores null.

    aqui coloco mi codigo:

     /// <summary>
            /// Inserta datos recopilados en excel.
            /// </summary>
            /// <param name="entArchivo"></param>
            /// <returns></returns>
            public bool dInsertaRegistrosArchivo(List<EntArchivo> entArchivo)
            {
                try
                {
    
                    string xml = SerializeObject<List<EntArchivo>>(entArchivo);
                    
                    var connectionString = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
    
                    using (SqlConnection sql = new SqlConnection(connectionString))
                    {
                        using (SqlCommand cmd = new SqlCommand("sp_bulkInsertArchivo", sql))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.Add("@XML", SqlDbType.NVarChar, -1).Value = xml;
                            //cmd.Parameters.AddWithValue("@UsersXml", xml);
                            sql.Open();
                            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);                        
                            rdr.Close();
                            sql.Close();
                        }
                    }
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw ex;
                }                   
            }

    y aqui el procedimiento almacenado que invoco

    CREATE PROCEDURE [dbo].[sp_bulkInsertArchivo]
    
    @XML AS XML
    AS
    BEGIN
    
        INSERT INTO archivo(nro_lista, fecha_clase, fecha_impresion, excepsiones,rut_docente, nombre_docente, mail_docente, 
    	programa_estudio, codigo_asignatura, asignatura, seccion, sub_seccion, modalidad, jornada, sala, sede, dia, 
    	modulo_inicio, modulo_termino, asistentes, alumnos_totales, materias_revisadas, fecha_retiro, fecha_devolucion, 
    	nombre_archivo, id_archivo)      
    
        SELECT nro_lista = t.p.value('@nro_lista','INT'),
    			fecha_clase = t.p.value('@fecha_clase','DATETIME'),
    			fecha_impresion = t.p.value('@fecha_impresion','DATETIME'),
    			excepsiones = t.p.value('@excepsiones','Varchar(200)'),
    			rut_docente = t.p.value('@rut_docente','Varchar(50)'),
    			nombre_docente = t.p.value('@nombre_docente','Varchar(200)'),
    			mail_docente = t.p.value('@mail_docente','Varchar(200)'),
    			programa_estudio = t.p.value('@programa_estudio','Varchar(200)'),
    			codigo_asignatura = t.p.value('@codigo_asignatura','Varchar(200)'),
    			asignatura = t.p.value('@asignatura','Varchar(200)'),
    			seccion = t.p.value('@seccion','Varchar(50)'),
    			sub_seccion = t.p.value('@sub_seccion','Varchar(50)'),
    			modalidad = t.p.value('@modalidad','Varchar(200)'),
    			jornada = t.p.value('@jornada','Varchar(200)'),
    			sala = t.p.value('@sala','Varchar(200)'),
    			sede= t.p.value('@sede','Varchar(200)'),
    			dia= t.p.value('@dia','Varchar(200)'),
    			modulo_inicio= t.p.value('@modulo_inicio','INT'),
    			modulo_termino= t.p.value('@modulo_termino','INT'),
    			asistentes= t.p.value('@asistentes','INT'),
    			alumnos_totales= t.p.value('@alumnos_totales','INT'),
    			materias_revisadas= t.p.value('@materias_revisadas','INT'),
    			fecha_retiro = t.p.value('@fecha_retiro','DATETIME'),
    			fecha_devolucion = t.p.value('@fecha_devolucion','DATETIME'),
    			nombre_archivo = t.p.value('@nombre_archivo','Varchar(50)'),
    			id_archivo = t.p.value('@id_archivo','Varchar(50)')
         FROM @XML.nodes('/ArrayOfEntArchivo/EntArchivo') t(p)
    
    END

    y asi es como queda los registros de la BD

    jueves, 22 de noviembre de 2018 20:48

Respuestas


  • Buenas noches, ya consegui resolverlo, por si a alguien le puede ayudar, el error era que la clase xmlSerializer en el c# me formateaba los campos con la primera letra mayuscula Nro_lista y yo lo buscaba en el store procedure como nro_lista, asi q me insertaba null. muchas gracias pueden dar por resuelto el tema
    • Marcado como respuesta erick1987v sábado, 24 de noviembre de 2018 3:44
    sábado, 24 de noviembre de 2018 3:44