Fórum Erro ao tentar cadastrar dados em banco MySQL via c(hashtag) #586607
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
Curtir tópico
+ 0Posts
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
Gostei + 0
10/10/2017
Leonardo
Gostei + 0
10/10/2017
Luiz Vichiatto
Gostei + 0
10/10/2017
Luiz Vichiatto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)