none
Me salta MenssageBox Con otros usuarios mysql c# RRS feed

  • Pregunta

  • Hola buenas, bueno pues tengo esta método que hace una consulta y funciona pero si ingreso otros usuarios me da el MessageBox que es invalido,
    poniendo un while en ver de un if  en reader.Read(), en si los reconoce todos los usuarios pero me sale la ventana que es invalido cuando se abra la aplicación completa varia veces,
    llevo intentando mucho cambiando y sin éxito.¿Me puede ayudar alguien?

    private bool MySqlConnectionServer()
            {
                string usr = textBoxUserName.Text;
                string pass = textBoxPassword.Text;
                
                try
                {
    
                    using (MySqlConnection Conexion = new MySqlConnection("Server=localhost; Database=******* Uid=*****; Pwd=********;"))
                    {
                        Conexion.Open();
                        MySqlCommand cmd = Conexion.CreateCommand();
                        
                        cmd.CommandText = "SELECT id,user,pass,email,typegroups FROM users_login";
                        cmd.CommandType = CommandType.Text;
                       
                        cmd.Parameters.AddWithValue("user", MySqlDbType.VarChar).Value = usr;
                        cmd.Parameters.AddWithValue("pass", MySqlDbType.VarChar).Value = pass;
    
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            if(reader.Read())
                            {
    
                                NamberComplet = "Id: " + reader.GetString(0) + " User: " + reader.GetString(1) + " Email: " + reader.GetString(3);
                                TypeUsers = reader.GetString(4);
                                user = reader.GetString(0) + reader.GetString(1) + reader.GetString(3) + reader.GetString(4);
                                if (Convert.ToString(reader["user"]) == usr && Convert.ToString(reader["pass"]) == pass)
                                {
                                    FtpClient ftpClient = new FtpClient();
                                    ftpClient.Host = "192.168.1.131";
                                    ftpClient.Credentials = new NetworkCredential("*****", "*******");
                                    ftpClient.Connect();
                                    ftpClient.CreateDirectory(user);
    
                                    RenderFarmBrok renderFarmBrok = new RenderFarmBrok();
                                    this.Hide();
                                    renderFarmBrok.Show();
    
                                }
                                else
                                {
                                    MessageBox.Show("Invalid Log In");
                                }
                            }
                            
                            reader.Close();
                        }
                        
                        Conexion.Close();
                       
                    }
                   
                }
                catch (MySqlException Exepcion)
                {
                    MessageBox.Show(Exepcion.ToString());
                }
                if (string.IsNullOrEmpty(TypeUsers))
                {
                    return false;
                }
                else
                {
                    return true;
                }
                
            }


    • Editado brok4d viernes, 20 de septiembre de 2019 20:06
    viernes, 20 de septiembre de 2019 20:05

Respuestas

  • Veo una cosa rara: Estás añadiendo dos parámetros al command... pero en la sentencia no se usan los parámetros. Es una simple SELECT sin WHERE, por lo que siempre devuelve todos los registros de la tabla.

    El if(reader.Read()) leerá el primero de los registros (sea el que sea, ya que no depende del usuario) y entonces el segundo "if" siempre será false (salvo cuando dé la casualidad de que el usuario que buscas es el primero) y por eso sale el mensaje de login inválido.

    Solución: Pon un WHERE que use los parámetros en la sentencia del Command.

    viernes, 20 de septiembre de 2019 20:41
    Moderador
  • hola

    si usas parametros tienes que definirlos

    string query = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user = ?user AND pass = ?pass";
    MySqlCommand cmd = new MySqlCommand(query, Conexion);
    
    cmd.Parameters.AddWithValue("?user", MySqlDbType.VarChar).Value = usr;
    cmd.Parameters.AddWithValue("?pass", MySqlDbType.VarChar).Value = pass;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 20 de septiembre de 2019 20:59

Todas las respuestas

  • Veo una cosa rara: Estás añadiendo dos parámetros al command... pero en la sentencia no se usan los parámetros. Es una simple SELECT sin WHERE, por lo que siempre devuelve todos los registros de la tabla.

    El if(reader.Read()) leerá el primero de los registros (sea el que sea, ya que no depende del usuario) y entonces el segundo "if" siempre será false (salvo cuando dé la casualidad de que el usuario que buscas es el primero) y por eso sale el mensaje de login inválido.

    Solución: Pon un WHERE que use los parámetros en la sentencia del Command.

    viernes, 20 de septiembre de 2019 20:41
    Moderador
  • hola

    si usas parametros tienes que definirlos

    string query = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user = ?user AND pass = ?pass";
    MySqlCommand cmd = new MySqlCommand(query, Conexion);
    
    cmd.Parameters.AddWithValue("?user", MySqlDbType.VarChar).Value = usr;
    cmd.Parameters.AddWithValue("?pass", MySqlDbType.VarChar).Value = pass;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 20 de septiembre de 2019 20:59
  • Hola gracias, lo he puesto a sin y me dice que la cadena no tiene el formato correcto ¿por que?

    cmd.CommandText = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user=@user AND pass=@pass";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@user", MySqlDbType.VarChar).Value = usr;
    cmd.Parameters.AddWithValue("@pass", MySqlDbType.VarChar).Value = pass;
    cmd.ExecuteNonQuery();

    viernes, 20 de septiembre de 2019 21:03
  • hola

    si usas parametros tienes que definirlos

    string query = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user = ?user AND pass = ?pass";
    MySqlCommand cmd = new MySqlCommand(query, Conexion);
    
    cmd.Parameters.AddWithValue("?user", MySqlDbType.VarChar).Value = usr;
    cmd.Parameters.AddWithValue("?pass", MySqlDbType.VarChar).Value = pass;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Me sale lo mismo que la cadena no es correcta
    viernes, 20 de septiembre de 2019 21:09
  • Al final lo he arreglado a sin. Me faltaban comillas simples. Gracias.

     string query = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user = '" + usr +"' AND pass ='" + pass + "'";

    viernes, 20 de septiembre de 2019 22:53
  • Estas usando parametros, no se concatena en el string los valores, no es una buena practica

    >>lo he puesto a sin y me dice que la cadena no tiene el formato correcto ¿por que?

     creo que ya veo el problema
    string query = "SELECT id,user,pass,email,typegroups FROM users_login WHERE user = ?user AND pass = ?pass";
    MySqlCommand cmd = new MySqlCommand(query, Conexion);
    
    cmd.Parameters.AddWithValue("?user", user);
    cmd.Parameters.AddWithValue("?pass", pass);

    con el AddWithValue() no defiens el tipo del parametro, solo lo asignas

    si quieres definir el tipo solo usas el Add()

    cmd.Parameters.Add("?user", MySqlDbType.VarChar).Value = usr;
    cmd.Parameters.Add("?pass", MySqlDbType.VarChar).Value = pass;


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 21 de septiembre de 2019 9:39
  • Gracias ya me funciona.
    domingo, 22 de septiembre de 2019 20:51