LOGIN E SENHA
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[Ô]);
}
}
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[Ô]);
}
}
Você tem certeza de que não está gerando exceção em nenhum lugar?
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...
Não encontrei a propriedade count...acho que a propriedade GetTypeCode() esteja errada...
Por que você está usando o GetTypeCode() ?
Tente assim na BLL:
if (objl.Login(usuario) <= 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
Tente assim na BLL:
if (objl.Login(usuario) <= 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
Desta forma ele exibe o seguinte erro: [Ô]não é possÃvel aplicar o operador <= a operandos do tipo void e int.
Tente assim então :
if (objl.Login(usuario) == 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
if (objl.Login(usuario) == 0)
{
throw new Exception([Ô]Usuário inválido[Ô]);
}
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);
}
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);
}
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