• Domingo 17 de Noviembre de 2024, 23:36

Autor Tema:  REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO  (Leído 5014 veces)

Rafa_Code

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« en: Miércoles 27 de Julio de 2011, 20:31 »
0
Buenas Tardes! estoy intentando guardar unos DATOS(CODIGO, DESCRIPCION,CANTIDAD,PRECIO) Y UNA FOTO. pero luego de llenar los datos y seleccionar la foto al presionar el BotonGuardar me aparece un MessageBox que dice "REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO" y no guarda el Registro

Aqui les dejo el codigo http://chopapp.com/#5rw3jefl 

 

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 System.Data.SqlClient;

namespace GuardaImagenEnBD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            DialogResult result = dialog.ShowDialog();

            if (DialogResult == DialogResult.OK)
            {
                pictureBox1.Image = Image.FromFile(dialog.FileName);

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Data Source=R-PORTATIL;Initial Catalog=ProductosEjemplo;Integrated Security=True");
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = "INSERT INTO ProductosEjemplo VALUES (@CODIGO,@DESCRIPCION,@CANTIDAD,@PRECIO,@FOTO)";
                    cmd.Parameters.Add("@CODIGO", System.Data.SqlDbType.Int);
                    cmd.Parameters.Add("@DESCRIPCION", System.Data.SqlDbType.NVarChar);
                    cmd.Parameters.Add("@CANTIDAD", System.Data.SqlDbType.Int);
                    cmd.Parameters.Add("@PRECIO", System.Data.SqlDbType.SmallMoney);
                    cmd.Parameters.Add("@FOTO", System.Data.SqlDbType.Image);


                    // Asignando los valores a los atributos
                    cmd.Parameters["@CODIGO"].Value = int.Parse(txtCodigo.Text);
                    cmd.Parameters["@DESCRIPCION"].Value = txtDescripcion.Text;
                    cmd.Parameters["@CANTIDAD"].Value = int.Parse(txtCantidad.Text);
                    cmd.Parameters["@PRECIO"].Value = float.Parse(txtPrecio.Text);


                    //Asignando el valor de la imagen
                    // Stream usado como buffer
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        // Se guarda la imagen en el buffer
                        pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                        // Se extraen los bytes del buffer para asignarlos como valor para el
                        // parámetro.
                        cmd.Parameters["@FOTO"].Value = ms.GetBuffer();
                    }
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                con.Close();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            MessageBox.Show("Registro Guardado Correctamente");
        }
    }
}

 :ayuda: :ayuda: :ayuda: :ayuda: :ayuda: :ayuda: :ayuda: :ayuda: :ayuda:

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #1 en: Miércoles 27 de Julio de 2011, 21:39 »
0
Seria muyyyy pero muyyy bueno que pongas un punto de interrupción en el evento del botón Guardar y ejecutes paso a paso con la tecla F10 tú código, para saber exactamente en que línea falla, le heche una mirada rápida y pues hasta ahorita mi única duda que me surgio es por que usas esto:

using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
{
....
...
..
.
}

En vez de usarlo así:

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();


Primera vez que veo que usen algo así no digo que no sea correcto, simplemente curiosidad nunca había visto ese tipo de código..

Bueno, en todo caso.. primero verífica en que linea te envia al Catch ...  por que hasta donde ví lo estás haciendo bien, salvo esa duda que me surgio ...


Saludos. :)
@gabio87

Rafa_Code

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #2 en: Miércoles 27 de Julio de 2011, 22:02 »
0
Hola mi pana por constumbre escribo eso asi porque algunas vces se me olvida poner el using en la parte primaria. Hice lo que me dijiste con el punto de interrupcion y aqui lo arroja o se para

Rafa_Code

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #3 en: Miércoles 27 de Julio de 2011, 22:15 »
0
i pana aqui le puse breakpoint y mira

[/img]

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #4 en: Jueves 28 de Julio de 2011, 08:48 »
0
no se ve tu imagen... vuelve a intentarlo.. :)....
@gabio87

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #5 en: Miércoles 3 de Agosto de 2011, 23:43 »
0
Me parece que esta tratando de acceder al objeto que guarda la imagen "cmd.ExecuteNonQuery()" cuando dicho objeto ya no está disponible.

Trata metiendo esto:
Código: [Seleccionar]
con.Open();
cmd.ExecuteNonQuery();


Dentro de:
Código: [Seleccionar]
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
...
}

zeed.ca

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:REFERECIA A OBJETO NO ESTABLECIDA COMO INSTANCIA A UN OBJETO
« Respuesta #6 en: Jueves 3 de Noviembre de 2011, 17:40 »
0
hey, qe tal estaba viendo el  código y finalmente esta listo para guardar las imágenes.

solo he cambiado esta linea
donde se establece la cadena de conexion: (@"Data Source=(local);Initial Catalog=EJEMPLO;Integrated Security=SSPI");
y picFoto por picImage, solo trabaje con otro nombre hehe bueno suerte.......

"EJEMPLO" ES EL NOMBRE DE LA BD QUE HE CREADO
Tambien adjunto un zip donde hay imagenes de la BD

 System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Data Source=(local);Initial Catalog=EJEMPLO;Integrated Security=SSPI");




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 System.Data.SqlClient;

namespace Error_Guardar_Imagen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnExaminar_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            DialogResult result = dialog.ShowDialog();
            if (result == DialogResult.OK)
                {
                    picImagen.Image = Image.FromFile(dialog.FileName);
                }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {

              {

            try
            {
                System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Data Source=(local);Initial Catalog=EJEMPLO;Integrated Security=SSPI");
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = "INSERT INTO Productos VALUES (@CODIGO,@DESCRIPCION,@CANTIDAD,@PRECIO,@FOTO)";
                    cmd.Parameters.Add("@CODIGO", System.Data.SqlDbType.Int);
                    cmd.Parameters.Add("@DESCRIPCION", System.Data.SqlDbType.NVarChar);
                    cmd.Parameters.Add("@CANTIDAD", System.Data.SqlDbType.Int);
                    cmd.Parameters.Add("@PRECIO", System.Data.SqlDbType.SmallMoney);
                    cmd.Parameters.Add("@FOTO", System.Data.SqlDbType.Image);


                    // Asignando los valores a los atributos
                    cmd.Parameters["@CODIGO"].Value = int.Parse(txtCodigo.Text);
                    cmd.Parameters["@DESCRIPCION"].Value = txtDescripcion.Text;
                    cmd.Parameters["@CANTIDAD"].Value = int.Parse(txtCantidad.Text);
                    cmd.Parameters["@PRECIO"].Value = float.Parse(txtPrecio.Text);


                    //Asignando el valor de la imagen
                    // Stream usado como buffer
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        // Se guarda la imagen en el buffer
                        picImagen.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                        // Se extraen los bytes del buffer para asignarlos como valor para el
                        // parámetro.
                        cmd.Parameters["@FOTO"].Value = ms.GetBuffer();
                    }
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                con.Close();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            MessageBox.Show("Registro Guardado Correctamente");
        }
    }
}                                       

        }
   
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.