Erro ao tentar cadastrar dados em banco MySQL via c(hashtag)
10/10/2017
0
Como não consigo cadastrar tenho problemas em cascata, afinal como vou Alterar, Consultar e Excluir um usuário não Inserido ???
Enfim, sempre que tentava cadastrar recebia a mensagem: "Connection must be valid and open", então decidi depurar o projeto, mas ainda sim não consegui encontrar onde está o erro.
OBS: Caso eu tente executar o comando "bancoDados.Conecta()" ele dá o erro: "System Invalid Operation: The Connection is already open. In.........método Conecta na classe Database".
To confuso, ele fala que a conexão tem que estar aberta (e válida), mas quando eu abro ele fala que ela já ta aberta, e agora Deus ???
O código abaixo (deixei só as partes envolvidas no processo):
classe Database abaixo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace crudMagicTurtle { class Database { public MySqlConnection mConn; // Variável de Conexão private MySqlDataAdapter mAdapter; // private DataSet mDataSet; private MySqlCommand command; //Variável para execução de comandos MySql private MySqlConnection conexao; //Variável de conexão private String strCaminhoBanco; //Variáveis de B.D. //Constructor public Database() { mConn = new MySqlConnection("Persist Security Info = false; server = localhost; database = db_magic_turtle; uid = root"); } public void Conecta() { try { mConn.Open(); } catch (Exception ex) { MessageBox.Show("Não foi possível estabelecer uma conexão com o Banco de Dados devido ao erro: " + ex); } } //Close connection public void Desconecta() { mConn.Close(); } public MySqlConnection ConexaoAtiva() { return conexao; } public void ExecutaSQL() { try { if (command.ExecuteNonQuery() > 0) { MessageBox.Show("Executado com sucesso"); } } catch (Exception ex) { MessageBox.Show("Erro ao executar o comando no banco: " + ex.Message); // Aqui dá o erro: Connection must be valid and open } } public void CriaComandoMySQL(String Mysql, MySqlConnection mConn) { command = new MySqlCommand(Mysql, conexao); } public void AdicionaParametro(String parametro, String valor) { try { command.Parameters.AddWithValue(parametro, valor); } catch (MySqlException ex) { MessageBox.Show("Erro no parâmetro: " + ex.Message); } } } }
classe Fornecedor abaixo:
//Variável Global para comandos SQL String sql; //Variável do banco de dados private Database bancoDados; private MySqlConnection mConn = new MySqlConnection("Persist Security Info = false; server = localhost; database = dbmagicturtle; uid = root"); // private MySqlDataAdapter mAdapter; // private DataSet mDataSet; //Construtor que receberá a conexão ativa com o B.D. public Fornecedor(Database conexao) { bancoDados = conexao; } //Método para adicionar public void Adiciona() { mConn = new MySqlConnection("Persist Security Info = false; server = localhost; database = db_magic_turtle; uid = root"); mConn.Open(); if (mConn.State == ConnectionState.Open) { // Mesmo com ConnectionState.Open = true ele dá o mesmo erro bancoDados.Conecta(); MySqlCommand command = new MySqlCommand("INSERT INTO tb_fornecedor (id_Fornecedor, nome_Fornecedor, cnpj_fornecedor, inc_est_fornecedor, cep_fornecedor, uf_fornecedor, cidade_fornecedor, bairro_fornecedor, rua_fornecedor, numero_endereco_fornecedor, contato_fornecedor,email_fornecedor, fone1_fornecedor, fone2_fornecedor) VALUES(null, '" + NomeFornecedor + "','" + CNPJFornecedor + "','" + IncEstFornecedor + "', '" + CEPFornecedor + "','" + UFFornecedor + "','" + CidadeFornecedor + "','" + BairroFornecedor + "','" + RuaFornecedor + "','" + NumeroFornecedor + "','" + NomeContatoFornecedor + "','" + EmailFornecedor + "','" + Fone1Fornecedor + "','" + Fone2Fornecedor + "')", mConn); bancoDados.CriaComandoMySQL(sql, bancoDados.ConexaoAtiva()); bancoDados.AdicionaParametro("NomeFornecedor", NomeFornecedor); bancoDados.AdicionaParametro("CNPJFornecedor", CNPJFornecedor); bancoDados.AdicionaParametro("IncEstFornecedor", IncEstFornecedor); bancoDados.AdicionaParametro("CEPFornecedor", CEPFornecedor); bancoDados.AdicionaParametro("UFFornecedor", UFFornecedor); bancoDados.AdicionaParametro("CidadeFornecedor", CidadeFornecedor); bancoDados.AdicionaParametro("BairroFornecedor", BairroFornecedor); bancoDados.AdicionaParametro("RuaFornecedor", RuaFornecedor); bancoDados.AdicionaParametro("NumeroFornecedor", NumeroFornecedor); bancoDados.AdicionaParametro("NomeCotatoFornecedor", NomeContatoFornecedor); bancoDados.AdicionaParametro("EmailFornecedor", EmailFornecedor); bancoDados.AdicionaParametro("Fone1Fornecedor", Fone1Fornecedor); bancoDados.AdicionaParametro("Fone2Fornecedor", Fone2Fornecedor); command.BeginExecuteNonQuery(); command.Dispose(); bancoDados.ExecutaSQL(); // MessageBox.Show("Cadastro realizado com sucesso ;)"); } else { MessageBox.Show("Deu errado aqui :/"); } }
formulário Fornecedor (chamado frmFornecedor) abaixo:
private void btnCadastrar_Click(object sender, EventArgs e) { Database bancoDados = new Database(); Fornecedor objFornecedor = new Fornecedor(bancoDados); // Para instanciar o Fornecedor // Para dar valores aos atributos da Classe Fornecedor: objFornecedor.NomeFornecedor = txtNome.Text; objFornecedor.CNPJFornecedor = txtCNPJ.Text; objFornecedor.IncEstFornecedor = txtIncEst.Text; objFornecedor.CEPFornecedor = txtCEP.Text; objFornecedor.UFFornecedor = txtUF.Text; objFornecedor.CidadeFornecedor = txtCidade.Text; objFornecedor.BairroFornecedor = txtBairro.Text; objFornecedor.RuaFornecedor = txtRua.Text; objFornecedor.NumeroFornecedor = txtNumero.Text; objFornecedor.NomeContatoFornecedor = txtNomeContato.Text; objFornecedor.EmailFornecedor = txtEmail.Text; objFornecedor.Fone1Fornecedor = txtFone1.Text; objFornecedor.Fone2Fornecedor = txtFone2.Text; objFornecedor.Adiciona(); bancoDados.Desconecta(); }
OBS: Peguei o código de uma amiga minha para comparar com o meu e coloquei um MessageBox no mesmo local que dá erro no meu, porém o dela passa nessa "validação", mesmo com o resto do código estando IGUAL o meu.
Meu professor não é do tipo que vai querer nem ver isso, então peço ajuda a algum de vocês, desde ja obrigado...
Leonardo
Posts
10/10/2017
Luiz Vichiatto
Acredito que o problema está com a sua conexão, não há senha no seu banco de dados?
/*modelo private String _conexaoMySQL = "server=localhost;user id=root;password=password;database=cadastro"; con = new MySqlConnection(_conexaoMySQL);*/ mConn = new MySqlConnection("Persist Security Info = false; server = localhost; database = db_magic_turtle; uid = root"); mConn.Open();
De uma analisada em:
https://social.msdn.microsoft.com/Forums/pt-BR/12b28343-e61f-4e02-9b1e-a2b3a299530a/cclasse-mysqlconnection?forum=vscsharppt
https://www.devmedia.com.br/crud-em-c-com-parametros/31043
10/10/2017
Luiz Vichiatto
10/10/2017
Luiz Vichiatto
Clique aqui para fazer login e interagir na Comunidade :)