Zatanna 0 Denunciar post Postado Novembro 9, 2010 Olá, Tenho um formulário de cadastro que ao clicar em salvar ocorre o seguinte erro: Referencia de objeto não definida para uma instância de um objeto. Aqui está o código da conexao using System; using System.Collections.Generic; using System.Linq; using System.Text; using FirebirdSql.Data.FirebirdClient; namespace classe_conexao { public class classe_ConexaoFB { private string strConexao; private FbConnection conexao; public classe_ConexaoFB() { } public classe_ConexaoFB(string strConexao) { set_strConexao(strConexao); Conecta(); } private void Conectar() { conexao = new FbConnection(get_strConexao()); } public void Conecta() { conexao.Open(); } public void Desconecta() { conexao.Close(); } public FbConnection get_Conexao() { return conexao; } public void set_strConexao(string strConexao) { strConexao = strConexao; } public string get_strConexao() { return strConexao; } } } e aqui o código do formulario de cadastro using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using classe_conexao; using FirebirdSql.Data.FirebirdClient; namespace Rudekar { public partial class CadCliente : Form { //INICIO DA CONEXAO private string caminho; private string strConexao; private classe_ConexaoFB conexao_FB; private FbDataAdapter adapt; private FbDataReader reader; private void inicialize() { caminho = @"C:\TCC\Programa\Banco\Rudekar.fdb"; strConexao = "User=SYSDBA;" + "Password=masterkey;" + "DataBase="+ caminho +"; Dialect=3"; reader = null; adapt = new FbDataAdapter(); conexao_FB = new classe_ConexaoFB(); } //FIM DA CONEXAO public CadCliente() { InitializeComponent(); } private void label1_Click(object sender, EventArgs e) { } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { } private void CadCliente_Load(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { CadVeiculos myform = new CadVeiculos(); myform.Show(); } private void button1_Click(object sender, EventArgs e) { } private void button6_Click(object sender, EventArgs e) { //string sql_Insert = "INSERT INTO cad_cliente (cod_cli, nom_cli, end_cli, cpf_cli, tel_cli, cel_cli ) VALUES ('" + @codigo + "', '" + @nome + "', '" + @endereco + "', '" + @cpf + "', '" + @telefone + "', '" + "celular +"');"; string sql_Insert = "INSERT INTO cad_cliente (cod_cli, nom_cli, end_cli, cpf_cli, tel_cli, cel_cli ) VALUES (@codigo,@nome, @endereco, @cpf, @telefone, @celular);"; try { conexao_FB.Conecta(); adapt = new FbDataAdapter(sql_Insert, conexao_FB.get_Conexao()); adapt.SelectCommand.Parameters.Clear(); adapt.SelectCommand.Parameters.Add("@codigo", tbcodigo.Text); adapt.SelectCommand.Parameters.Add("@nome", tbnome.Text); adapt.SelectCommand.Parameters.Add("@endereco", tbendereco.Text); adapt.SelectCommand.Parameters.Add("@cpf", tbcpf.Text); adapt.SelectCommand.Parameters.Add("@telefone", tbtelefone.Text); adapt.SelectCommand.Parameters.Add("@celular", tbcelular.Text); adapt.SelectCommand.ExecuteNonQuery(); MessageBox.Show("Cadastro reaizado com sucesso", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception er) { MessageBox.Show("Erro ao fazer a inclusão: " + er.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { conexao_FB.Desconecta(); } } } } Compartilhar este post Link para o post Compartilhar em outros sites
Daniel LM Costa 2 Denunciar post Postado Novembro 10, 2010 Não pude testar pois não tenho Firebird, mas em uma analise inicial, vi dois problemas você precisa colocar a string como parâmetro do método new em conexao_FB = new classe_ConexaoFB(strConexao); Em segundo lugar, quando você for fechar a conexão é interessante verificar o status da conexão.. Esse erro aparece quando o objeto , no caso conexao_FB, é Nothing. Não gosto de palpitar muito, mas faço um pouco diferente esse tipo de objeto. Caso queira posta que a gente troca um figurinha ... OK ?? Compartilhar este post Link para o post Compartilhar em outros sites
Zatanna 0 Denunciar post Postado Novembro 11, 2010 Olá, obrigada pela ajuda, mas acabei fazendo de outra forma, beeeemm mais simples hehe segue abaixo o código como ficou: string strSQL = ""; string s = "User=SYSDBA;Password=masterkey;Database=C:\\TCC\\Programa\\Banco\\RUDEKAR.FDB;DataSource=localhost;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=0;Connection timeout=15;Pooling=True;Packet Size=8192;Server Type=0"; FbConnection con = new FbConnection(s); FbCommand cmd = new FbCommand(); FbParameter[] prmParametro = new FbParameter[6];//O NUMERO DO FbParameter DEVE SER MODIFICADO CASO A QUANTIDADE DE CAMPOS SEJA DIFERENTE prmParametro[0] = new FbParameter("@CODIGO", tbcodigo.Text); prmParametro[1] = new FbParameter("@NOME", tbnome.Text); prmParametro[2] = new FbParameter("@ENDERECO", tbendereco.Text); prmParametro[3] = new FbParameter("@CPF", tbcpf.Text); prmParametro[4] = new FbParameter("@TELEFONE", tbtelefone.Text); prmParametro[5] = new FbParameter("@CELULAR", tbcelular.Text); strSQL = "insert into cad_cliente (COD_CLI, NOM_CLI, END_CLI, CPF_CLI, TEL_CLI, CEL_CLI) values (@CODIGO, @NOME, @ENDERECO, @CPF, @TELEFONE, @CELULAR)"; foreach (FbParameter p in prmParametro) { cmd.Parameters.Add(p); } try { con.Open(); cmd.Connection = con; cmd.CommandType = CommandType.Text; cmd.CommandText = strSQL.ToString(); cmd.ExecuteNonQuery(); MessageBox.Show("Cadastro realizado com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); tbcodigo.Clear(); tbnome.Clear(); tbendereco.Clear(); tbcpf.Clear(); tbtelefone.Clear(); tbcelular.Clear(); tbcodigo.Focus(); } catch (Exception E) { throw new Exception(E.Message); } finally { if ((cmd != null)) { cmd.Dispose(); } if (con.State != ConnectionState.Closed) { con.Close(); con.Dispose(); } } } funcionou perfeitamente! obrigada! (: Compartilhar este post Link para o post Compartilhar em outros sites
Daniel LM Costa 2 Denunciar post Postado Novembro 11, 2010 Ok.. Uma dica seria interessante você isolar a parte que executa o comando sql de modo a evitar repetição desnecessaria de código.. O tempo é nosso maior inimigo e não consegui iniciar um projeto que tenho de criar junto à galera um classe 'definitiva' de acesso à bancos de dados.. Compartilhar este post Link para o post Compartilhar em outros sites