none
Classe de conexão com banco Mysql C# Asp.net. Problema retorno Boolean RRS feed

  • Pergunta

  • Olá Amigos! Novamente aqui venho para tentar resolver um problema difícil. Tenho um site com problema de login de usuário, onde tenho a seguinte função de conexão:
    public DataTable queryDataTable(string sql, string[] strVariaveis, MySqlDbType[] objVarType, Object[] objVariaveis)
        {
            DataTable objDataTable = new DataTable();
            MySqlCommand objCommand = new MySqlCommand();
            MySqlDataAdapter objAdapter = new MySqlDataAdapter();
    
            try
            {
                objCommand.CommandType = CommandType.Text;
                objCommand.CommandText = sql;
                objCommand.Connection = conectar();
                objAdapter.SelectCommand = objCommand;
             
    
    
                for (int i = 0; i < strVariaveis.Length; i++)
                {
                    MySqlParameter objParameter = new MySqlParameter("@" + strVariaveis[i], objVarType[i]);
                    objParameter.Value = objVariaveis[i];
                    objCommand.Parameters.Add(objParameter);
    
                }
    
              
                objAdapter.Fill(objDataTable);
    
            }
    
            catch (MySqlException e)
            {
                throw new Exception("Erro 404" + e.StackTrace);
            }
    
            finally
            {
                if (objAdapter != null)
                {
                    objAdapter.Dispose();
                    objAdapter = null;
                }
    
                if (objCommand != null)
                {
                    if (objCommand.Connection != null)
                    {
                        objCommand.Connection.Close();
                        objCommand.Connection.Dispose();
                        objCommand.Connection = null;
                    }
                }
            }
            return objDataTable;
    
        }
    


    Pois bem, no caso acima tenho tenho uma função que conecta no banco através de uma outra funçãos simples com nome conecta().

    Essa função acima retorna um datatable de acorco com a string parametrizada passada.

    ok.

    Agora ai vai a minha função de login de uma classe Usuario:

     public bool logar(){
    
                    ConexaoBanco conecte = new ConexaoBanco();
    
                      string[] strVariavel = { "email","senha"};
    
                    MySqlDbType[] sqlType = { MySqlDbType.VarChar, MySqlDbType.VarChar };
    
                    object[] objetos = new object[] { Email, Senha};
    
    
                    return Convert.ToBoolean(conecte.queryDataTable("SELECT logarUsuario(@email,@senha) as 'verificador'", strVariavel, sqlType, objetos).Rows[0]["verificador"]);
    
                }
    

    instancio primeiramente a classe que contém a primeira função la em cima, passo os parametros(email e senha) e chamo a função passando a chamada da function criada na no mysql.

    Os valores dos atributos email e senha sao passados utilizando as propertys da classe usuario.

    No mysql, quando executo diretamente do query browser o retorno é 1

     o problema é quando acesso na aplicação que  ele me retorna 0 ao invés de 1.

    já verifiquei se tem espaço no email e senha no banco, não tem.

     

     

    terça-feira, 6 de setembro de 2011 17:13

Respostas

  • Boa Noite!

    Nesse caso existe dois problemas:

    1º Você não pode convert esse método, pois o mesmo vai retornar um DataTable.

    2º Nunca aplique um ALIAS para 2 campos de retorno. (@email,@senha) as 'verificador'

    public DataTable queryDataTable(string sql, string[] strVariaveis, MySqlDbType[] objVarType, Object[] objVariaveis)
    return Convert.ToBoolean(conecte.queryDataTable("SELECT logarUsuario(@email,@senha) as 'verificador'", strVariavel, sqlType, objetos).Rows[0]["verificador"]);
    segunda-feira, 31 de outubro de 2011 22:42