Erro ao tentar cadastrar dados em banco MySQL via c(hashtag)

10/10/2017

0

Olá, estou refazendo (pela 5 vez) um CRUD simples no Visual Studio, o que eu quero fazer é cadastrar um fornecedor à um banco de dados MySQL(hospedado no WAMP), porém não consigo "abrir a conexão" na hora de cadastrar.
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

Leonardo

Responder

Posts

10/10/2017

Luiz Vichiatto

Você debugou este código?

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
Responder

10/10/2017

Leonardo

O banco está sem senha mesmo :/
Responder

10/10/2017

Luiz Vichiatto

E observou e entendeu o código, passou pelo debug, visualizou o conteúdo das variáreis, algor fora do normal ou do preenchimento das vaiáveis...
Responder

10/10/2017

Luiz Vichiatto

E observou e entendeu o código, passou pelo debug, visualizou o conteúdo das variáreis, algor fora do normal ou do preenchimento das vaiáveis...
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar