Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

                                

    }
}

Compartilhar este post


Link para o post
Compartilhar em outros 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 ??

Compartilhar este post


Link para o post
Compartilhar em outros 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! (:

Compartilhar este post


Link para o post
Compartilhar em outros 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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.