Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

Zatanna

Erro no C# - referencia de objeto não definida para uma instancia de u

Recommended Posts

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.

 

Imagem Postada

 

 

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();
            }
        }

                                

    }
}

Share this post


Link to post
Share on other sites

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 ??

Share this post


Link to post
Share on other sites

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! (:

Share this post


Link to post
Share on other sites

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..

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.