Consulta con tablas relacionas en SQL y C#

Soy nuevo con el tema de sql y c# para empezar y necesito una guia, por así decirlo, con lo siguiente

Tengo este formulario

Este formulario alimenta dos tablas en la base de datos "proyectos" y "estudiantes" todo bien hasta ese punto, ya que, si se guardan registros, tanto nuevos proyectos, como estudiantes por separado. Lo que no tengo muy claro es en asignar estudiantes a un proyecto y guardarlo o relacionar los datos y cuando se haga una consulta, por ejemplo de proyectos, arroje que estudiantes están asignados a él mismo, igual de viceversa, al consultar un estudiante arroje a qué proyecto está asociado.

Tengo conocimiento sobre las primary key y las foreign keys, solo necesito una ayuda/guia en crear la relación arriba indicada

1 respuesta

Respuesta

Lo primero que debes contemplar es la cardinalidad de la relación : si es N a N necesitas crear una nueva tabla con los identificadores de empleados y proyectos como primary key.

Pero si es 1 a N no sería necesario: por ejemplo si un empleado solo puede estar asignado a un solo proyecto alcanza con agregar el identificador del proyecto a la tabla de empleados.

Es de 1 a N

Por otra parte me recomendaron usar un inner join para unir las dos tablas, en sql ya lo hice y funciona, pero no tengo muy claro como modificar mi consulta SELECT en c#

 public static List<Estudiantes> BuscarEstudiante(String pnombre, String papellido)
        {
            List<Estudiantes> lista = new List<Estudiantes>();
            using (SqlCeConnection conexion = BDc.ObtnerCOnexion())
            {
                SqlCeCommand comando = new SqlCeCommand(string.Format("SELECT idEstudiantes, cedula, nombre, apellido, carrera, condicion, codProyecto FROM estudiantes WHERE nombre LIKE '%{0}%' and apellido LIKE '%{1}%'", pnombre, papellido), conexion);
                SqlCeDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Estudiantes pestudiante = new Estudiantes();
                    pestudiante.idEstudiantes = reader.GetInt32(0);
                    pestudiante.cedula = reader.GetString(1);
                    pestudiante.nombre = reader.GetString(2);
                    pestudiante.apellido = reader.GetString(3);
                    pestudiante.carrera = reader.GetString(4);
                    pestudiante.condicion = reader.GetString(5);
                    pestudiante.codProyecto = reader.GetInt32(6);
                    lista.Add(pestudiante);
                }
                conexion.Close();
                return lista;
            }
        }

Este es el Select que usa actualmente donde solo trae la información de los estudiantes, necesito modificarlo para que también traiga la información del proyecto al que está asignado el estudiante como en la consulta sql

deberías modificar la setencia SELECT para hacer el inner join

SqlCeCommand comando = new SqlCeCommand(string.Format("SELECT idEstudiantes, cedula, nombre, apellido, carrera, condicion, codProyecto FROM estudiantes inner join proyectos on proyectos.idproyecto=estudiantes.codproyecto WHERE nombre LIKE '%{0}%' and apellido LIKE '%{1}%'", pnombre, papellido), conexion);
                SqlCeDataReader reader = comando.ExecuteReader();

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas