Usuário com melhor resposta
Funções C#

Pergunta
-
Olá,
Estou fazendo uma aplicação c# que involve um form de login, e tenho uma parte do código que é repetida várias vezes ao longo do código. Gostava de saber como posso criar uma função para escrever esse código apenas uma vez e depois ser chamado em outros eventos.
O código é o seguinte:
public partial class Form1 : Form
{
//LIGAÇÃO COM A BD
MySqlConnection mConn = new MySqlConnection("server=localhost;database=escola;uid=root");
MySqlDataAdapter mAdaptar;
DataSet mDataSet;
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
}
//BOTAO LOGIN
private void login_Click(object sender, EventArgs e)
{ //ESTE É O CODIGO QUE QUERO USAR NA FUNCAOmAdaptar = new MySqlDataAdapter("SELECT `N_Processo`, `senha` FROM `dadoslogin` WHERE `N_Processo` = '" + user.Text + "' AND `senha` = '" + pass.Text + "'", mConn);
mAdaptar.Fill(table);
if (table.Rows.Count <= 0)
{
//MENSAGEM ERRO
painel_msg.Visible = true;
painel_msg.BackColor= Color.Red;
painel_msg.Height = 0;
erro.Text = "Utilizador ou Senha Incorretos";
timer1.Start();
}
else
{
//MENSAGEM SUCESSO
painel_msg.Visible = true;
painel_msg.BackColor = Color.Green;
painel_msg.Height = 0;
painel_sair.Height = 0;
erro.Text = "Login efetuado com sucesso";
timer2.Start();
}
table.Clear();
}
Respostas
-
Olá RodrigoMAD,
Uma das boas práticas é você criar uma classe só responsável para se comunicar com teu banco e executar as operações CRUD. Como você pediu te posto um modelo da classe responsável só com teu banco e o método que usa Adapter retornando uma DataTable, você pode estender esta classe com demais operações da CRUD.
public class AccessDataBase : IDisposable
{
private readonly MySqlConnection mConn;
public AccessDataBase()
{
try
{
mConn = new MySqlConnection("server=localhost;database=escola;uid=root");;
mConn.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
public DataTable ExecutarComandoAdapter(string sqlQuery)
{
var adaptador = new MySqlDataAdapter(sqlQuery, mConn);
var dados = new DataTable();
adaptador.Fill(dados);
return dados;
}
public void Dispose()
{
if (mConn.State == ConnectionState.Open)
mConn.Close();
}
}
Usando o teu exemplo, o codigo fica refatorado do seguinte:
public partial class Form1 : Form
{
AccessDataBase accessDb;
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
}
//BOTAO LOGIN
private void login_Click(object sender, EventArgs e)
{ //ESTE É O CODIGO QUE QUERO USAR NA FUNCAO
accessDb = new AccessDataBase();
var query = "SELECT `N_Processo`, `senha` FROM `dadoslogin` WHERE `N_Processo` = '" + user.Text + "' AND `senha` = '" + pass.Text + "'";
table = accessDb.ExecutarComandoAdapter(query);
if (table.Rows.Count <= 0)
{
//MENSAGEM ERRO
painel_msg.Visible = true;
painel_msg.BackColor= Color.Red;
painel_msg.Height = 0;
erro.Text = "Utilizador ou Senha Incorretos";
timer1.Start();
}
else
{
//MENSAGEM SUCESSO
painel_msg.Visible = true;
painel_msg.BackColor = Color.Green;
painel_msg.Height = 0;
painel_sair.Height = 0;
erro.Text = "Login efetuado com sucesso";
timer2.Start();
}
table.Clear();
}Se te ajudou vota como útil, e se respondeu a tua pergunta marque como resposta.
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 18 de janeiro de 2019 18:49
-
Boa tarde,
Por falta de retorno essa thread está encerrada.
Se necessário favor abrir uma nova thread.
Atenciosamente,Filipe B de Castro
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 18 de janeiro de 2019 18:49
Todas as Respostas
-
Olá RodrigoMAD,
Uma das boas práticas é você criar uma classe só responsável para se comunicar com teu banco e executar as operações CRUD. Como você pediu te posto um modelo da classe responsável só com teu banco e o método que usa Adapter retornando uma DataTable, você pode estender esta classe com demais operações da CRUD.
public class AccessDataBase : IDisposable
{
private readonly MySqlConnection mConn;
public AccessDataBase()
{
try
{
mConn = new MySqlConnection("server=localhost;database=escola;uid=root");;
mConn.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
public DataTable ExecutarComandoAdapter(string sqlQuery)
{
var adaptador = new MySqlDataAdapter(sqlQuery, mConn);
var dados = new DataTable();
adaptador.Fill(dados);
return dados;
}
public void Dispose()
{
if (mConn.State == ConnectionState.Open)
mConn.Close();
}
}
Usando o teu exemplo, o codigo fica refatorado do seguinte:
public partial class Form1 : Form
{
AccessDataBase accessDb;
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
}
//BOTAO LOGIN
private void login_Click(object sender, EventArgs e)
{ //ESTE É O CODIGO QUE QUERO USAR NA FUNCAO
accessDb = new AccessDataBase();
var query = "SELECT `N_Processo`, `senha` FROM `dadoslogin` WHERE `N_Processo` = '" + user.Text + "' AND `senha` = '" + pass.Text + "'";
table = accessDb.ExecutarComandoAdapter(query);
if (table.Rows.Count <= 0)
{
//MENSAGEM ERRO
painel_msg.Visible = true;
painel_msg.BackColor= Color.Red;
painel_msg.Height = 0;
erro.Text = "Utilizador ou Senha Incorretos";
timer1.Start();
}
else
{
//MENSAGEM SUCESSO
painel_msg.Visible = true;
painel_msg.BackColor = Color.Green;
painel_msg.Height = 0;
painel_sair.Height = 0;
erro.Text = "Login efetuado com sucesso";
timer2.Start();
}
table.Clear();
}Se te ajudou vota como útil, e se respondeu a tua pergunta marque como resposta.
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 18 de janeiro de 2019 18:49
-
Boa tarde,
Por falta de retorno essa thread está encerrada.
Se necessário favor abrir uma nova thread.
Atenciosamente,Filipe B de Castro
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 18 de janeiro de 2019 18:49