Hoje postaram uma dúvida no forúm da MSDN sobre controle de
Login. E eu achei interessante postar aqui uma forma simples de se criar uma
tela de login.
Esse exemplo é em WindowsForms.
Primei eu adicionei os seguintes controles:
- Label – Usuário e Senha
- TextBox – Usuário e Senha
- Button – Login
Os nomes dos controles ficaram:
- TxtUsuario
- TxtSenha
- BtnLogin
O form ficou dessa maneira:
No evento Click do botão Login entrei com o seguinte código:
private
void BtnLogin_Click(object
sender, EventArgs e)
{
if
(txtUsuario.Text != string.Empty &&
txtSenha.Text != string.Empty)
{
if (ExecutaLogin(txtUsuario.Text, txtSenha.Text))
{
MessageBox.Show("Bem Vindo");
}
else
{
MessageBox.Show("Usuário ou senha inválida");
}
}
}
Acima eu estou verificando se o usuário preencheu os campos,
se sim, eu executo a função: ExecutaLogin(string, string), veja o código:
private bool ExecutaLogin(string usuario, string
senha)
{
bool ok = false;
SqlConnection
cnnBase = new SqlConnection(ControleLogin.Properties.Settings.Default.Conexao);
SqlCommand
cmd = new SqlCommand("select nome from usuario where login=@usuario and
senha=@senha", cnnBase);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@usuario",
SqlDbType.VarChar).Value = usuario;
cmd.Parameters.Add("@senha",
SqlDbType.VarChar).Value = senha;
SqlDataAdapter da = new
SqlDataAdapter(cmd);
DataTable
dt = new DataTable();
da.Fill(dt);
da.Dispose();
cmd.Dispose();
cnnBase.Close();
if
(dt.Rows.Count == 1)
{
return true;
}
else
{
return false;
}
return ok;
}
O que esta sendo feito nessa função, nessa função eu utilizo
4 variáveis diferentes, são elas:
- cnnBase - é a conexão com o meu banco de dados, a connectionString eu criei no App.Config. assim eu posso centralizar e acessar de qualquer ponto do sistema.
- cmd – é o comando que será executado pelo SQL, no meu caso uma consulta.
- da – é o retorno da minha consulta
- dt – é o resultado transformado da minha consulta em uma tabela.
Repare que eu não estou concatenando os valores que o
usuário passou ao comando SQL que será
executado. Isso porque o usuário pode inserir alguns códigos e quebrar o
resultado do SQL, isso é chamado de SqlInjection. Por isso eu estou adicionado como
parâmetro e informando qual é o tipo de dado que estou passando.
Eu coloquei um IF retornando como ok somente se o retorno
for igual a um, pois se o resultado contiver mais de um registro ou não
retornar nada, o retorno tem que ser falso.
Ao executar e digitar o usuário correto, o resultado será
esse:
Digitando o usuário errado e a senha correta:
Muito bom, poderia mostrar como criou a conexão no App.config?
ResponderExcluirhttps://programandodotnet.files.wordpress.com/2011/11/connectionstring.jpg?w=960
ExcluirSqlConnection(ControleLogin.Properties.Settings.Default.Conexao);
ResponderExcluirMe mostra que não existe ControleLogin, pode me explicar o porque?
Olá, controlelogin é o nome do Projeto em si, se você criou o projeto com outro nome, teria que usar esse nome que vocÊ deu.
Excluircomo retorno uma registro do dataTable?
ResponderExcluirOlá, você tem o Rows dentro de datatable, ele tem o retorno de todas as linhas do seu select.
Excluirentão ficaria da seguinte forma:
dt.Rows[Linha][Coluna];
onde linha é a linha de retorno do seu select. e coluna é qual coluna você quer a informação. lembrando que os dois índices começam no 0.
dt.Rows[0][0];