LOGIN E SENHA

CHMATOS 21/12/2014 12:41:59
#443329
Pessoal,

Estou desenvolvendo uma aplicação em três camadas e estou com um problema na funcionalidade login e senha. O problema é que a validação do if na classe BLL não está recuperando o valor da variável i da classe DAL. O que preciso alterar?


A minha classe DAL está assim:

public int Login(DTOUsuario Autenticacao)
{

//conexao

SqlConnection cn = new SqlConnection();

try
{

cn.ConnectionString = Dados.StringDeConexao;

SqlCommand cmd = new SqlCommand();

cmd.Connection = cn;

cmd.CommandText = [Ô]select count(1) from usuario where login = @login and senha = @senha[Ô];

cmd.Parameters.AddWithValue([Ô]@login[Ô], Autenticacao.login);

cmd.Parameters.AddWithValue([Ô]@senha[Ô], Autenticacao.senha);

cn.Open();

int i = (int)cmd.ExecuteNonQuery();

return i;

}

catch (SqlException ex)
{

throw new Exception([Ô]Servidor SQL Erro:[Ô] + ex.Number);

}

catch (Exception ex)
{

throw new Exception(ex.Message);

}

finally
{

cn.Close();

}

}

Classe BLL

public void Login(DTOUsuario usuario)
{

if (usuario.senha.Trim().Length == 0)
{

throw new Exception([Ô]Senha obrigatoria[Ô]);

}

DALUsuario objl = new DALUsuario();

if (objl.Login(usuario).GetTypeCode() <= 0)
{

throw new Exception([Ô]Usuário inválido[Ô]);

}

}
JABA 21/12/2014 17:36:39
#443332
Você tem certeza de que não está gerando exceção em nenhum lugar?
CHMATOS 22/12/2014 10:31:57
#443338
Não ele simplesmente não no if de validação na classe BLL. O problema esta nessa validação...
Não encontrei a propriedade count...acho que a propriedade GetTypeCode() esteja errada...
JABA 22/12/2014 11:44:43
#443340
Por que você está usando o GetTypeCode() ?

Tente assim na BLL:

if (objl.Login(usuario) <= 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
CHMATOS 23/12/2014 14:46:35
#443376
Desta forma ele exibe o seguinte erro: [Ô]não é possível aplicar o operador <= a operandos do tipo void e int.
JABA 23/12/2014 16:57:45
#443379
Tente assim então :

if (objl.Login(usuario) == 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
CHMATOS 23/12/2014 17:29:27
#443380
Consegui fazer com datareader

agora minha camada bll está assim

DALUsuario objl = new DALUsuario();
SqlDataReader i = objl.Login(usuario);

if (i.HasRows)
{
throw new Exception([Ô]Usuário logado[Ô]);
}

Agora como posso seguir na camada de apresentação? Imaginei mais ou menos isso, porém, acabei travando na consição (no if).

DTOUsuario usuario = new DTOUsuario();

usuario.login = txtLogin.Text;
usuario.senha = txtSenha.Text;

BLLUsuario obj = new BLLUsuario();

obj.Login(usuario);

if(condição == true)
{
Response.Redirect(home.apsx);
}
JABA 23/12/2014 20:26:36
#443383
Vou te dar um conselho: Fuja de classes DTO! Isso é conhecido como Modelo Anêmico e não é POO . Procure material sobre o Modelo Rico, daí você vai começar a entender o porquê de não usar DTO.
Tópico encerrado , respostas não são mais permitidas