[ Foro de C# ]

Error de sintaxis en la operación JOIN.

08-Jun-2016 01:27
aaaaaaa bbbbbbb
2 Respuestas

Hola, consulto si alguno se da cuenta donde esta el error que señala el titulo que encabeza la consulta??.....Si alguien sabe, agradeceria que me lo hagan saber, y desde ya mil bendiciones...


public List<NotaEntity> getNota(int idCurso, int idMateria, DateTime fecha)
        {
            try
            {
                connection.Open();
                command.Parameters.AddWithValue("@idCurso", idCurso);
                command.Parameters.AddWithValue("@idMateria", idMateria);
                command.Parameters.AddWithValue("@Fec", fecha);

                command.CommandText = @"SELECT Notas.Id_Nota, Notas.Nota, Notas.Fecha, Notas.Id_Tipo, Notas.Trimestre, Notas.Orden, 
                                        Alumno.Id_Alumno, Alumno.Nombre, Alumno.Apellido, TipoNota.Descripcion AS NombreTipo
                                    FROM Notas INNER JOIN (((MateriaPorAlumno ON Notas.Id_Tipo = MateriaPorAlumno.Id) 
                                        INNER JOIN Alumno ON MateriaPorAlumno.Id_Alumno = Alumno.Id_Alumno) 
                                        INNER JOIN TipoNota ON TipoNota.Id = Notas.Id_Tipo)
                                        INNER JOIN TurnoMateria ON TurnoMateria.Id_Turno = MateriaPorAlumno.Id_Turno
                				    WHERE (TurnoMateria.Id_Curso = @idCurso) AND (TurnoMateria.Id_Materia = @idMateria) AND Notas.Fecha = @Fec";


                OleDbDataReader lector = command.ExecuteReader();

                List<NotaEntity> listNota = new List<NotaEntity>();
                while (lector.Read())
                {
                    NotaEntity nota = new NotaEntity();
                    if (lector["Id_Nota"] != null)
                        nota.Id_Nota = Convert.ToInt32(lector["Id_Nota"].ToString());
                    if (lector["Id_Tipo"] != null)
                    {
                        nota.Tipo = new TipoNotaEntity();
                        nota.Tipo.Id = Convert.ToInt32(lector["Id_Tipo"].ToString());
                        nota.Tipo.Descripcion = lector["NombreTipo"].ToString();
                    }
                    if (lector["Nota"] != null)
                        nota.Nota = Convert.ToInt32(lector["Nota"].ToString());
                    if (lector["Fecha"] != null)
                        nota.Fecha = Convert.ToDateTime(lector["Fecha"].ToString());
                    if (lector["Trimestre"] != null)
                        nota.Trimestre = Convert.ToInt32(lector["Trimestre"].ToString());
                    if (lector["Orden"] != null)
                        nota.Orden = Convert.ToInt32(lector["Orden"].ToString());

                    MateriaPorAlumnoEntity mpa = new MateriaPorAlumnoEntity();
                    mpa.Alumno = new AlumnoEntity();
                    mpa.Alumno.Id_Alumno = Convert.ToInt32(lector["Id_Alumno"].ToString());
                    mpa.Alumno.Nombre = lector["Nombre"].ToString();
                    mpa.Alumno.Apellido = lector["Apellido"].ToString();

                    nota.MateriaPorAlumno = mpa;

                    listNota.Add(nota);
                }

                return listNota;
            }
            catch (Exception ex)


 


10-Jun-2016 14:52
Invitado (Ivan)

Hola  lo  que esta pasan que nesecitas las comillas  simples  en @Fec ya que tu  tipo de  dato es  datetime  o  date y no  te las  reconoce  yo  le  haria de la  siguiente  manera


FROM Notas INNER JOIN (((MateriaPorAlumno ON Notas.Id_Tipo = MateriaPorAlumno.Id) 
                                       INNER JOIN Alumno ON MateriaPorAlumno.Id_Alumno = Alumno.Id_Alumno) 
                                       INNER JOIN TipoNota ON TipoNota.Id = Notas.Id_Tipo) 
                                       INNER JOIN TurnoMateria ON TurnoMateria.Id_Turno = MateriaPorAlumno.Id_Turno 
               	   WHERE (TurnoMateria.Id_Curso = @idCurso) AND (TurnoMateria.Id_Materia = @idMateria) AND Notas.Fecha = '@Fec'"; 


Espero  y te  sirva   saludos..


17-Jul-2016 23:07
Invitado (Eduardo Romero Marin )

El error es que fecha la debes de poner entre comillas simples, pero aun mas por eso no entiendo por que no realizas un store procedure en el gestor, y mandas a llamar el mismo claro enviándole los parámetros si es necesario.

Es una mejor programación limpia, no código espaguetti .
Te recomiendo manejar los join en el Gestor de BD






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)