none
Soy principiante en Visual C# 2010 y necesito ayuda RRS feed

  • Pregunta

  • El siguiente es un codigo para buscar datos de una base en Access y llenar un DataGridView, mis consultas son dos:

    1.- me podrían explicar que realiza el codigo que va como sentencia 

    2.- Que el lo que trae el numero, para este ejemplo el 1 que va en este codigo  = reader.GetString(1)

    A continuacion el detalle del codigo

    public ArrayList alumnosPorCurso(int curso)

            {

                ArrayList alumnos = new ArrayList();

                conexion = conexionDAO.conectar();

                conexion.Open();

     

     

                string sentencia = "select a.*,b.nombre from alumnos a, cursos b, alumnosxcurso c " +

                    "where c.idcurso = @campo1 and a.cedula=c.cedula and b.id = c.idcurso";

     

                OleDbCommand cmd = new OleDbCommand(sentencia, conexion);

                cmd.Parameters.AddWithValue("@campo1", curso);

                OleDbDataReader reader = cmd.ExecuteReader();

                AlumnoXCurso alumno;

                while (reader.Read())

                {

                    alumno = new AlumnoXCurso();

                    alumno.Nombres = reader.GetString(2);

                    alumno.Apellidos = reader.GetString(3);

                    alumno.NombreCurso = reader.GetString(5); 

                    alumnos.Add(alumno);

                }

     

                return alumnos;

            }

    miércoles, 28 de diciembre de 2011 3:23

Respuestas

  • hola

    1-

    el codigo lo que hace es eejcutar una consulta contra la base de datos, recorer los registros que retorna y volcarlo a una lista de un objeto definido en la clase AlumnoXCurso

    igualmente hay algunos puntos que cambiaria porque no estan del todo bien

     

    - el primero podria ser no usar el a.* en esta linea

    select a.*,b.nombre from alumnos a, cursos b, alumnosxcurso c

    defines los campos que vas a usar

    select a.id, a.nombre, a.apellido, b.nombre as Nombrecurso from alumnos a, cursos b, alumnosxcurso c

    por supuesto los campos de alumnos los invente poque no se cuales defines en la tabla, pero si deberias defini alli los que vas a utilizar

     

     

     

    - despues usa el INNER JOIN para relacionar las tablas

     

    select a.id, a.nombre, a.apellido, b.nombre as Nombrecurso

    from alumnos a INNER JOIN alumnosxcurso c ON a.cedula=c.cedula

    INNER JOIN cursos b ON b.id = c.idcurso

    where c.idcurso = @campo1

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:00
  • tambien podrias mencionar que al usar el while la creacion de la entidad AlumnoXCursola realices dentro del while

    recuerda que als instancias se trabjan por referencia, por lo que estarias pisando siempre la misma entidad y no creando nuevas

            
                while (reader.Read())
                {
    
                    AlumnoXCurso alumno= new AlumnoXCurso();
    
                    alumno.Nombres = reader.GetString(2);
    
                    alumno.Apellidos = reader.GetString(3);
    
                    alumno.NombreCurso = reader.GetString(5); 
    
                    alumnos.Add(alumno);
    
                }
    


    veras que la linea

     AlumnoXCurso alumno= new AlumnoXCurso();

    dentro del while

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:02
  • 2-

    esta linea

    codigo  = reader.GetString(1)

    no la veo en el codigo, pero imagino recuperas el campo codigo de la tabla de alumnos

    ya que en el query los primeros campos son de alumns ya que defines el a.* en el select


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:04

Todas las respuestas

  • hola

    1-

    el codigo lo que hace es eejcutar una consulta contra la base de datos, recorer los registros que retorna y volcarlo a una lista de un objeto definido en la clase AlumnoXCurso

    igualmente hay algunos puntos que cambiaria porque no estan del todo bien

     

    - el primero podria ser no usar el a.* en esta linea

    select a.*,b.nombre from alumnos a, cursos b, alumnosxcurso c

    defines los campos que vas a usar

    select a.id, a.nombre, a.apellido, b.nombre as Nombrecurso from alumnos a, cursos b, alumnosxcurso c

    por supuesto los campos de alumnos los invente poque no se cuales defines en la tabla, pero si deberias defini alli los que vas a utilizar

     

     

     

    - despues usa el INNER JOIN para relacionar las tablas

     

    select a.id, a.nombre, a.apellido, b.nombre as Nombrecurso

    from alumnos a INNER JOIN alumnosxcurso c ON a.cedula=c.cedula

    INNER JOIN cursos b ON b.id = c.idcurso

    where c.idcurso = @campo1

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:00
  • tambien podrias mencionar que al usar el while la creacion de la entidad AlumnoXCursola realices dentro del while

    recuerda que als instancias se trabjan por referencia, por lo que estarias pisando siempre la misma entidad y no creando nuevas

            
                while (reader.Read())
                {
    
                    AlumnoXCurso alumno= new AlumnoXCurso();
    
                    alumno.Nombres = reader.GetString(2);
    
                    alumno.Apellidos = reader.GetString(3);
    
                    alumno.NombreCurso = reader.GetString(5); 
    
                    alumnos.Add(alumno);
    
                }
    


    veras que la linea

     AlumnoXCurso alumno= new AlumnoXCurso();

    dentro del while

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:02
  • 2-

    esta linea

    codigo  = reader.GetString(1)

    no la veo en el codigo, pero imagino recuperas el campo codigo de la tabla de alumnos

    ya que en el query los primeros campos son de alumns ya que defines el a.* en el select


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 28 de diciembre de 2011 4:04