SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: candasina en Jueves 30 de Agosto de 2007, 18:59

Título: Duda Select Base Datos
Publicado por: candasina en Jueves 30 de Agosto de 2007, 18:59
Hola de nuevo!!!!!


Pues tengo el siguiente codigo, en el cual intento saber si un usuario se encuentra en la base de datos.

Código: Text
  1.  
  2.  
  3. public bool ExistenciaUsuario(string user)
  4. {
  5.  
  6.   sentencia = "SELECT * FROM Usuarios U WHERE Usuarios.idUsuario=@user";
  7.   OleDbCommand query = new OleDbCommand(sentencia, connection);
  8.  
  9.       query.Parameters.Add("@user", OleDbType.VarChar);
  10.       query.Parameters["@user"].Value = user;
  11.       OleDbDataReader reader = query.ExecuteReader();
  12.  
  13.         reader.Read();
  14.         string password = reader.GetValue(1).ToString();
  15.         reader.Close();
  16.  
  17.       if(password=="")
  18.            return false;//porque el usuario no existe
  19.          else
  20.              return true;
  21.  
  22. }
  23.  
  24.  
  25.  



Esto lo hago cuando por ejemplo una persona hace login, y claro necesito verificar que ese es un usuario de la aplicacion. Entonces mi duda es, si el resultado de la consulta no devuelve nada, en password que tendria un string vacio?????(por eso en la condicion del if puse eso). Es que al compilar el codigo me da error en:

Código: Text
  1.  
  2. OleDbCommand query = new OleDbCommand(sentencia, connection);
  3.  
  4.  


y me dice: No se han especificado valores para algunos de los parámetros requeridos.


Podria alguien echarme una mano :D

Gracias a todos por adelantado :ayuda:
Título: Re: Duda Select Base Datos
Publicado por: candasina en Jueves 30 de Agosto de 2007, 19:05
Perdon el codigo es el siguiente, el de antes ahi unos errores

Código: Text
  1.  
  2.  
  3. public bool ExistenciaUsuario(string user)
  4. {
  5.  
  6.  sentencia = "SELECT * FROM Usuarios U WHERE U.idUsuario=@user";
  7.  OleDbCommand query = new OleDbCommand(sentencia, connection);
  8.  
  9.      query.Parameters.Add("@user", OleDbType.VarChar);
  10.      query.Parameters["@user"].Value = user;
  11.      OleDbDataReader reader = query.ExecuteReader(); //error aqui
  12.  
  13.        reader.Read();
  14.        string password = reader.GetValue(0).ToString();
  15.        reader.Close();
  16.  
  17.      //si no me devuelve nada, devuelvo false sino true
  18.       if(password=="")
  19.           return false;//porque el usuario no existe
  20.         else
  21.             return true;
  22.  
  23. }
  24.  
  25.  
  26.  



Me equivoque el error me lo da aqui, el mensaje de error es el que puse en el mensaje anterior:


Código: Text
  1.  
  2.  
  3. OleDbDataReader reader = query.ExecuteReader(); //error aqui
  4.  
  5.  
  6.  


Siento la equivocacion, espero que entendais mi duda :D
Título: Re: Duda Select Base Datos
Publicado por: Scherzo en Viernes 31 de Agosto de 2007, 10:49
Hola, te contesto basándome en lo que he podido leer, no en la práctica, ya que yo las consultas SQL las lanzo de forma diferente (construyo la consulta como tal desde mi código, con todos sus parámetros ya metidos, y la lanzo ya construida), así que a lo mejor estoy diciendo alguna tontería, pero por probar nada se pierde.

Por lo que he podido leer, OLE DB .NET no permite el uso de parámetros con nombre, sino que se basa en la posición que ocupe cada parámetro a la hora de insertarse para saber a qué parámetro de la consulta corresponde. Para indicar dónde va un parámetro dentro de tu consulta se usa el carácter interrogación "?". Por lo tanto el primer parámetro insertado, irá en la primera interrogación que se encuentre, y así con el resto.

Es decir, en tu ejemplo la cosa quedaría así:

Código: Text
  1. sentencia = "SELECT * FROM Usuarios U WHERE U.idUsuario=?";
  2.  

Y luego, añadirías el parámetro sin más, así:

Código: Text
  1. command.Parameters.Add(user)
  2.  


Prueba a ver si haciéndolo así te funciona. Insisto en que no lo he probado, por lo que no sé si será la solución a tu problema.

Saludos
Título: Re: Duda Select Base Datos
Publicado por: candasina en Viernes 31 de Agosto de 2007, 18:43
Código: Text
  1.  
  2.  
  3. Public bool ExistenciaUsuario(string user)
  4.  
  5. {
  6.  
  7. string usu="";
  8.  
  9. sentencia = "SELECT * FROM Usuarios WHERE Usuarios.idUsuario=@user";
  10.  
  11. OleDbCommand query = new OleDbCommand(sentencia, connection);
  12.  
  13. query.Parameters.Add("@user", OleDbType.VarChar);
  14.  
  15. query.Parameters["@user"].Value = user;
  16.  
  17. OleDbDataReader reader = query.ExecuteReader();
  18.  
  19.  
  20.  
  21. if (reader.Read())
  22.  
  23. {
  24.  
  25. usu = reader.GetValue(0).ToString();
  26.  
  27. }
  28.  
  29. reader.Close();
  30.  
  31. if (usu == "")
  32.  
  33. return false;//porque el usuario no existe
  34.  
  35. else
  36.  
  37. return true;
  38.  
  39. }
  40.  
  41.  
  42.  
  43.  


Pues al final el problema era que si no ponia reader.read() en el if, no sabia si me habia devuelto o no alguna fila la consulta que habia realizado. Luego es cuando si devuelve algo la consulta, pues escojo el valor que me interese.

Es que no te entendi muy bien lo que me habias explicado :S. Pero de todos modos muchas gracias :D