none
NullReferenceExcepcion en consulta LINQ RRS feed

  • Pregunta

  • Estimados, soy algo nuevo en LINQ, estoy acostumbrado al ADO tradicional.  Cuento corto, tengo la siguiente función que me valida si ambos campos están presentes o no en la BD.

    En la tabla que invoco y sobre la cual hago la consulta, el campo USUARIO, por diseño de la tabla, acepta valores NULL.  Cuando compilo y depuro el método, me salta NULLREFERENCEEXCEPTION.

    public bool CheckSecurity()
            {
                var context         = new AraucanaSeguridadDataContext();
                var listUsers       = new List<tbl_Usuario>();
    
                try
                {
                    var usuarioQry = (from u in context.tbl_Usuario
                                      where
                                          (string.Equals(u.Usuario.Trim(), _usuario.Trim()) &&
                                           string.Equals(u.Password.Trim(), _password.Trim()))
                                      select u);
    
                    return usuarioQry.Any();
                }
                catch (NullReferenceException ex)
                {
                    throw;
                }
    
                return false;
            }

    ¿Cómo puedo solventarlo? gracias! saludos cordiales.

    lunes, 1 de octubre de 2012 16:20

Respuestas

  • En la tabla que invoco y sobre la cual hago la consulta, el campo USUARIO, por diseño de la tabla, acepta valores NULL

    pero como pretrnder realziar un login si el usuario puede ser nulo, el usuario y password deben ser obligatorios

    sino debes validarlo

    var usuarioQry = (from u in context.tbl_Usuario
    				  let usu = u.Usuario== null ? "" : u.Usuario
    				  where
    					  (string.Equals(usu, _usuario.Trim()) &&
    					   string.Equals(u.Password.Trim(), _password.Trim()))
    				  select u);

    o sea si es nulo pones un valor por defecto, sino tomas el valor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Excoriate lunes, 1 de octubre de 2012 20:28
    lunes, 1 de octubre de 2012 17:58

Todas las respuestas

  • En la tabla que invoco y sobre la cual hago la consulta, el campo USUARIO, por diseño de la tabla, acepta valores NULL

    pero como pretrnder realziar un login si el usuario puede ser nulo, el usuario y password deben ser obligatorios

    sino debes validarlo

    var usuarioQry = (from u in context.tbl_Usuario
    				  let usu = u.Usuario== null ? "" : u.Usuario
    				  where
    					  (string.Equals(usu, _usuario.Trim()) &&
    					   string.Equals(u.Password.Trim(), _password.Trim()))
    				  select u);

    o sea si es nulo pones un valor por defecto, sino tomas el valor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Excoriate lunes, 1 de octubre de 2012 20:28
    lunes, 1 de octubre de 2012 17:58
  • En la tabla que invoco y sobre la cual hago la consulta, el campo USUARIO, por diseño de la tabla, acepta valores NULL

    pero como pretrnder realziar un login si el usuario puede ser nulo, el usuario y password deben ser obligatorios

    sino debes validarlo

    var usuarioQry = (from u in context.tbl_Usuario
    				  let usu = u.Usuario== null ? "" : u.Usuario
    				  where
    					  (string.Equals(usu, _usuario.Trim()) &&
    					   string.Equals(u.Password.Trim(), _password.Trim()))
    				  select u);

    o sea si es nulo pones un valor por defecto, sino tomas el valor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Hola Leandro.

    Gracias, pero con tu código aún así me da NULLREFERENCEEXCEPTION. 

    Saludos.

    lunes, 1 de octubre de 2012 19:16
  • mm que raro, no sera por el campo password, yo solo lo aplique al usuario, quizas debas aplicarlo en ambos

    sino podrias poner un breakpoint antes que se genere el error y pasar el mouse por sobre als variables para detectar cual esta en null


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 1 de octubre de 2012 19:51
  • No, es con ambos.  De hecho, hasta ambas columnas las rediseñé y ahora no aceptan NULL.    Qué raro para ser algo tan simple... :(

    var usuarioQry  = (from u in context.tbl_Usuario
                                       let usu = u.Usuario ?? string.Empty
                                       let pass = u.Password ?? string.Empty
                                        where
                                          (string.Equals(usu, _usuario.Trim()) &&
                                           string.Equals(pass, _password.Trim()))
                                      select u);
    
                    return !(usuarioQry.Any());
    Saludos.

    lunes, 1 de octubre de 2012 20:03
  • Leandro.

    Ya lo resolví.  De algún modo, el parámetro _password estaba pasando NULL, lo validé previamente y funcionó.  Bueno... previamente me dio la excepción "OperationNotSuportedExcepton" en el String.Equals, lo solucioné con AsEnumerable para no forzar loa conversión y trabajar localmente con LinqToObjects.

    Gracias!!!!

    lunes, 1 de octubre de 2012 20:28