elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19
131  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 18:42 pm
Obviamente mi código era de referencia, y el listview lo cree para listar las imágenes.

Pero bueno ya solucionaste no?

EDIT:

Ahora que veo tu código tienes varios problemas que, creo, deberías echarle un ojo:

1.- Considera usar una struct o clase, para almacenar la data en vez de un arreglo
2.- Qué pasa si la imagen no es jpeg?
3.- Si la aplicación final va a usar SqlServerExpress no pongas las fotos en la BD porque la versión express tiene un límite de almacenamiento.
4.- Considera usar una clase de acceso a datos en vez de hacerlo todo en un método.
5.- En:
Código:
String sentenciaSQL = "SELECT * FROM contactos WHERE apodo = 'pavolino'"; 
Seleccionas * , por lo que la consulta se hace más lenta, considera seleccionar las columnas que necesitas, así sean todas. Además de que nada asegura de que estas usando la imagen correcta al momento de cargar la data ya que estas usando un foreach en vez de validar si hay registros en el datatable y luego usar el primero.
6.- Con respecto a la base de datos, siempre utiliza un primarykey decimal, autoincremental, es decir, identity, con eso creas una identidad para el sistema.

Un saludo!


hola, gracias. te comento:

1. lo intentaré hacer así xD
2. Eso es lo que me preguntaba yo unos post más atrás.
3. Seguramente termine usando mysql, de momento ando probando con imágenes pequeñajas. xD
4. Sí, en mi código lo hago por separado, ya que utilizo un patron dao y el acceso lo hago en otra clase.
5. Pero si quiero seleccionar todos los datos??? no entiendo muy bien como se haría..
6. Sí, ahora solo estoy de pruebas, luego tendré que usar un primary key para hacer las búsquedas.


@Hartigan en el insert solo inserta la imagen y un string para la consulta, luego prueba nuevamente que valores guarda.

Código
  1. INSERT INTO <nombre_tabla>
  2. [(<campo1>[,<campo2>,...])]
  3. VALUES
  4. (<valor1>,<valor2>,...);

debes especificar el campo y el valor para hacerlo.

No entiendo muy  bien como sería.... dices que le pase la imagen y un array para los datos???...

Una cosa mas, estas utilizando:

Código
  1. '" + img + "'

saca las dobles comillas.

ok, voy a probar a ver.

Muchas gracias a los 2.
132  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 17:39 pm
Obviamente mi código era de referencia, y el listview lo cree para listar las imágenes.

Pero bueno ya solucionaste no?

ya me imaigno. Que va tio, me sigue pasando lo mismo. El problema es como dice el compañero 43H4FH44H45H4CH49H56H45H  que los datos que guardo y los que recojo son completamente distintos. Al guardar los bytes son: 255 216 255 224....... y al leer de la base de datos, la variable img tiene los siguientes bytes: 83 121 115 116...... como puedes ver no se parecen en nada. Entonces debe ser o que guardo mal, o que recojo mal, pero esque he seguido vuestros códigos y debería estar bien, no veo el fallo por ningun lado... A ver si me podeis ayudar.

Saludos y perdonar todas las molestias que estoy causando.

Gracias.
133  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 17:28 pm
Bueno pues efectivamente ahí está el problema.

Os publico como hago para guardar y para leer de la base de datos a ver si veis el error

Guardar:

Código
  1. private void button_AceptarNC_Click(object sender, EventArgs e)
  2.        {
  3.            bool exito = false;
  4.            //Primero copiamos las strings
  5.            string[] datos = new string[33];
  6.            int imgLength = 0;
  7.  
  8.            /*string temp = Path.GetTempFileName();
  9.             FileStream fs = new FileStream(temp, FileMode.OpenOrCreate, FileAccess.ReadWrite);*/
  10.  
  11.            System.IO.Stream derecho = new System.IO.MemoryStream();
  12.            this.pictureBox_FotoImagen.Image.Save(derecho, System.Drawing.Imaging.ImageFormat.Jpeg);
  13.            byte[] img = new byte[derecho.Length];
  14.            derecho.Position = 0;
  15.            derecho.Read(img, 0, System.Convert.ToInt32(derecho.Length));
  16.            derecho.Close();
  17.            this.textBox1.Text = img[0].ToString() + " " + img[1].ToString() + " " + img[2].ToString() + " " + img[3].ToString();
  18.  
  19.  
  20.  
  21.            //System.IO.Stream stream = new System.IO.MemoryStream();
  22.  
  23.            datos[0] = this.textBox_Titulo.Text;
  24.            datos[1] = this.textBox_Nombre.Text;
  25.            datos[2] = this.textBox_SegundoNombre.Text;
  26.            datos[3] = this.textBox_PrimerApellido.Text;
  27.            datos[4] = this.textBox_SegundoApellido.Text;
  28.            datos[5] = this.textBox_Sobrenombre.Text;
  29.            datos[6] = this.textBox_Direccion.Text;
  30.            datos[7] = this.textBox_Ciudad.Text;
  31.            datos[8] = this.textBox_Provincia.Text;
  32.            datos[9] = this.textBox_CodigoPostal.Text;
  33.            datos[10] = this.textBox_Pais.Text;
  34.            datos[11] = this.textBox_Prefijo_Telefono.Text + this.textBox_Telefono.Text;
  35.            datos[12] = this.textBox_Movil.Text;
  36.            datos[13] = this.textBox_Fax.Text;
  37.            datos[14] = this.listBox_Email.Text;
  38.            datos[15] = this.textBox_Web.Text;
  39.            datos[16] = this.textBox_Twitter.Text;
  40.            datos[17] = this.textBox_Facebook.Text;
  41.            datos[18] = this.textBox_Direccion_Trabajo.Text;
  42.            datos[19] = this.textBox_Ciudad_Trabajo.Text;
  43.            datos[20] = this.textBox_Provincia_Trabajo.Text;
  44.            datos[21] = this.textBox_CP_Trabajo.Text;
  45.            datos[22] = this.textBox_Pais_Trabajo.Text;
  46.            datos[23] = this.textBox_Organizacion_Trabajo.Text;
  47.            datos[24] = this.textBox_Puesto_Trabajo.Text;
  48.            datos[25] = this.textBox_Departamento_Trabajo.Text;
  49.            datos[26] = this.textBox_Oficina_Trabajo.Text;
  50.            datos[27] = this.textBox_Telefono_Trabajo.Text;
  51.            datos[28] = this.textBox_Fax_Trabajo.Text;
  52.            datos[29] = this.comboBox_Sexo.Text;
  53.            datos[30] = this.textBox_Pareja.Text;
  54.            datos[31] = this.listBox_Hijos.Text;
  55.            datos[32] = this.richTextBox_Comentario.Text;
  56.  
  57.  
  58.            /*this.pictureBox_FotoImagen.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
  59.             fs.Position = 0;
  60.  
  61.             imgLength = Convert.ToInt32(fs.Length);
  62.             byte[] img = new byte[imgLength];
  63.             fs.Read(img, 0, imgLength);
  64.             fs.Close();*/
  65.  
  66.            String sentenciaSQL = "insert into contactos values('" + datos[0] + "','" + datos[1] + "','" + datos[2] + "','" +
  67.                     datos[3] + "','" + datos[4] + "','" + datos[5] + "','" + datos[6] + "','" + datos[7] + "','" + datos[8] + "','" +
  68.                     datos[9] + "','" + datos[10] + "','" + datos[11] + "','" + datos[12] + "','" + datos[13] + "','" + datos[14] + "','" +
  69.                     datos[15] + "','" + datos[16] + "','" + datos[17] + "','" + datos[18] + "','" + datos[19] + "','" + datos[20] + "','" +
  70.                     datos[21] + "','" + datos[22] + "','" + datos[23] + "','" + datos[24] + "','" + datos[25] + "','" + datos[26] + "','" +
  71.                     datos[27] + "','" + datos[28] + "','" + datos[29] + "','" + datos[30] + "','" + datos[31] + "','" + datos[32] + "','" + img + "')";
  72.  
  73.            SqlConnection conexion = null;
  74.  
  75.            try
  76.            {
  77.                conexion = new SqlConnection(cadena_conexion);
  78.                conexion.Open();
  79.  
  80.                SqlCommand cmd = new SqlCommand(sentenciaSQL, conexion);
  81.  
  82.                if ((1 != cmd.ExecuteNonQuery()))
  83.                {
  84.                    MessageBox.Show("Se ha producido un error al acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  85.                    exito = false;
  86.                }
  87.                else
  88.                {
  89.                    exito = true;
  90.                }
  91.  
  92.            }
  93.            catch (SqlException ex)
  94.            {
  95.                // MessageBox.Show(ex.InnerException.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  96.                MessageBox.Show(" ha producido un error al acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  97.                exito = false;
  98.            }
  99.            finally
  100.            {
  101.                if (conexion != null)
  102.                {
  103.                    if (conexion.State == ConnectionState.Open)
  104.                    {
  105.                        conexion.Close();
  106.                    }
  107.                }
  108.            }
  109. if (exito)
  110.            {
  111.                MessageBox.Show("Contacto añadido con exito", "Éxito", MessageBoxButtons.OK, MessageBoxIcon.Information);
  112.                this.Close();
  113.            }
  114.            else
  115.            {
  116.                MessageBox.Show("No se ha podido añadir el contacto", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  117.                this.Close();
  118.            }
  119.  
  120.  
  121.  
  122.  
  123.  
  124.        }
  125.  

Ahora como leo:

Código
  1. public Interfaz_Datos_Contacto()
  2.        {
  3.            InitializeComponent();
  4.  
  5.  
  6.            string cadena_conexion = @"Server= (local)\SQLEXPRESS; DataBase = agenda; Integrated Security = yes;";
  7.  
  8.            byte[] img = new byte[0];
  9.            string[] datos = new string[33];
  10.  
  11.  
  12.  
  13.            String sentenciaSQL = "SELECT * FROM contactos WHERE apodo = 'pavolino'";
  14.  
  15.            SqlConnection conexion = null;
  16.  
  17.            try
  18.            {
  19.                conexion = new SqlConnection(cadena_conexion);
  20.                SqlDataAdapter data_adapter = new SqlDataAdapter(sentenciaSQL, conexion);
  21.  
  22.                DataTable data_table = new DataTable();
  23.  
  24.                conexion.Open();
  25.                data_adapter.Fill(data_table);
  26.  
  27.                datos = new string[33];
  28.                datos[0] = data_table.Rows[0][0].ToString();
  29.                datos[1] = data_table.Rows[0][1].ToString();
  30.                datos[2] = data_table.Rows[0][2].ToString();
  31.                datos[3] = data_table.Rows[0][3].ToString();
  32.                datos[4] = data_table.Rows[0][4].ToString();
  33.                datos[5] = data_table.Rows[0][5].ToString();
  34.                datos[6] = data_table.Rows[0][6].ToString();
  35.                datos[7] = data_table.Rows[0][7].ToString();
  36.                datos[8] = data_table.Rows[0][8].ToString();
  37.                datos[9] = data_table.Rows[0][9].ToString();
  38.                datos[10] = data_table.Rows[0][10].ToString();
  39.                datos[11] = data_table.Rows[0][11].ToString();
  40.                datos[12] = data_table.Rows[0][12].ToString();
  41.                datos[13] = data_table.Rows[0][13].ToString();
  42.                datos[14] = data_table.Rows[0][14].ToString();
  43.                datos[15] = data_table.Rows[0][15].ToString();
  44.                datos[16] = data_table.Rows[0][16].ToString();
  45.                datos[17] = data_table.Rows[0][17].ToString();
  46.                datos[18] = data_table.Rows[0][18].ToString();
  47.                datos[19] = data_table.Rows[0][19].ToString();
  48.                datos[20] = data_table.Rows[0][20].ToString();
  49.                datos[21] = data_table.Rows[0][21].ToString();
  50.                datos[22] = data_table.Rows[0][22].ToString();
  51.                datos[23] = data_table.Rows[0][23].ToString();
  52.                datos[24] = data_table.Rows[0][24].ToString();
  53.                datos[25] = data_table.Rows[0][25].ToString();
  54.                datos[26] = data_table.Rows[0][26].ToString();
  55.                datos[27] = data_table.Rows[0][27].ToString();
  56.                datos[28] = data_table.Rows[0][28].ToString();
  57.                datos[29] = data_table.Rows[0][29].ToString();
  58.                datos[30] = data_table.Rows[0][30].ToString();
  59.                datos[31] = data_table.Rows[0][31].ToString();
  60.                datos[32] = data_table.Rows[0][32].ToString();
  61.  
  62.  
  63.  
  64.  
  65.  
  66.                foreach (DataRow myRow in data_table.Rows)
  67.                {
  68.                    img = (byte[])myRow["imagen"];
  69.                    this.textBox1.Text = img[0].ToString() + " " + img[1].ToString() + " " + img[2].ToString() + " " + img[3].ToString();
  70.  
  71.                }
  72.  
  73.            }
  74.            catch (SqlException ex)
  75.            {
  76.                datos = null;
  77.                MessageBox.Show("No se ha podido acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  78.            }
  79.            finally
  80.            {
  81.                if (conexion != null)
  82.                {
  83.                    if (conexion.State == ConnectionState.Open)
  84.                    {
  85.                        conexion.Close();              
  86.  
  87.                    }
  88.                }
  89.            }
  90. if ((datos != null) && ( img != null))
  91.            {
  92.                label_Nombre_Completo.Text = datos[1] + "" + datos[2] + "" + datos[3] + "" + datos[4];
  93.                label_Titulo.Text = datos[0];
  94.                label_Nombre.Text = datos[1];
  95.                label_SegundoNombre.Text = datos[2];
  96.                label_PrimerApellido.Text = datos[3];
  97.                label_SegundoApellido.Text = datos[4];
  98.                label_Sobrenombre.Text = datos[5];
  99.                label_Direccion.Text = datos[6];
  100.                label_Ciudad.Text = datos[7];
  101.                label_EstadoProvincia.Text = datos[8];
  102.                label_CodigoPostal.Text = datos[9];
  103.                label_PaisRegion.Text = datos[10];
  104.                label_Telefono.Text = datos[11];
  105.                label_Movil.Text = datos[12];
  106.                label_Fax.Text = datos[13];
  107.                label_EMail.Text = datos[14];
  108.                label_Web.Text = datos[15];
  109.                label_Twitter.Text = datos[16];
  110.                label_Facebook.Text = datos[17];
  111.                label_Direccion_Trabajo.Text = datos[18];
  112.                label_Ciudad_Trabajo.Text = datos[19];
  113.                label_Provincia_Trabajo.Text = datos[20];
  114.                label_CP_Trabajo.Text = datos[21];
  115.                label_Pais_Trabajo.Text = datos[22];
  116.                label_Organizacion_Trabajo.Text = datos[23];
  117.                label_Puesto_Trabajo.Text = datos[24];
  118.                label_Departamento_Trabajo.Text = datos[25];
  119.                label_Oficina_Trabajo.Text = datos[26];
  120.                label_Telefono_Trabajo.Text = datos[27];
  121.                label_Fax_Trabajo.Text = datos[28];
  122.                label_Sexo.Text = datos[29];
  123.                label_Pareja.Text = datos[30];
  124.                label_Hijos.Text = datos[31];
  125.                richTextBox_Comentarios.Text = datos[32];
  126.  
  127.  
  128.  
  129.                MemoryStream stream = new MemoryStream(img);
  130.                stream.Write(img, 0, img.Length);
  131.                stream = new MemoryStream(img);
  132.                this.pictureBox_FotoImagen.Image = Image.FromStream(stream);      
  133.  
  134.  
  135.  
  136.           }
  137.            else
  138.            {
  139.                MessageBox.Show("Se ha producido un error al obtener los datos del contacto", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  140.            }
  141.  
  142.  
  143.  
  144.        }

He dejado el código donde compruebo los bytes y es ceirto que salen completamente distintos.

Salu2.

EDITO: la tabla de los contactos en la base de datos la tengo así:

Código
  1. CREATE TABLE contactos(
  2. titulo VARCHAR(50),
  3. nombre VARCHAR(50) NOT NULL,
  4. nombre2 VARCHAR(50),
  5. ape1 VARCHAR(50) NOT NULL,
  6. ape2 VARCHAR(50),
  7. apodo VARCHAR(50) NOT NULL,
  8. direccion VARCHAR(150),
  9. ciudad VARCHAR(20),
  10. provincia VARCHAR(20),
  11. cp VARCHAR(10),
  12. pais VARCHAR(20),
  13. telefono VARCHAR(20),
  14. movil VARCHAR(20),
  15. fax VARCHAR(20),
  16. email VARCHAR(50),
  17. web VARCHAR(50),
  18. twitter VARCHAR(50),
  19. facebook VARCHAR(50),
  20. direccion2 VARCHAR(150),
  21. ciudad2 VARCHAR(20),
  22. provincia2 VARCHAR(20),
  23. cp2 VARCHAR(10),
  24. pais2 VARCHAR(20),
  25. organizacion VARCHAR(50),
  26. puesto VARCHAR(50),
  27. departamento VARCHAR(50),
  28. oficina VARCHAR(50),
  29. telefono2 VARCHAR(20),
  30. fax2 VARCHAR(20),
  31. sexo VARCHAR(10),
  32. pareja VARCHAR(50),
  33. hijos VARCHAR(100),
  34. comentario VARCHAR(500),
  35. imagen image,
  36.  
  37. );
134  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 16:39 pm
Bueno no hay manera. He seguido tropecientos tutoriales y esque hay algo que no va bien. En la parte en la que se hace la conversión de bytes al tipo image, toma el valor null, no se porqué y entonces no le asigna nada... Creo que voy a desistir y a probar el método de almacenar solo la dirección local de la imágen.

Puedes leer que almaceno en la BD sin asignar la imagen al picturebox.
Si leemos algunos bytes antes de almacenarlos:

Código
  1. System.IO.Stream derecho = new System.IO.MemoryStream();
  2. this.pictureBox1.Image.Save(derecho, System.Drawing.Imaging.ImageFormat.Jpeg);
  3. byte[] imgDerecha = new byte[derecho.Length];
  4. derecho.Position = 0;
  5. derecho.Read(imgDerecha, 0, System.Convert.ToInt32(derecho.Length));
  6. derecho.Close();
  7. this.textBox1.Text = imgDerecha[0].ToString() + " " + imgDerecha[1].ToString();

y luego con la BD antes de asignar la imagen leemos los mismos bytes para saber si se almaceno correctamente asi podemos comparar con los bytes originales.
Puedes hacerlo con el primero y el ultimo o hacer un foreach para saber donde existe alguna diferencia.
Me parece que no estas guardando correctamente los bytes en la BD.
Pero tienes que hacer las pruebas para estar seguro en que parte tienes el problema.

Tiene que ser eso, que se guardan mal los datos, porque incluso con el programa de D4N93R me sale el mismo error en el listview (parámetro no válido).

Voy a probar a ver. Muchas gracias.
135  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 15:57 pm
Cómo que no tienes un listview? claro que si, arrástralo de la barra de herramientas. y le pones el mismo nombre que en mi código.

Vamos vamos que si puedes..

si tener lo tengo, pero en mi programa no tengo intención de añadirlo. xDD Probaré aunque sea por ver si funciona. xD
136  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 13:48 pm
Bueno no hay manera. He seguido tropecientos tutoriales y esque hay algo que no va bien. En la parte en la que se hace la conversión de bytes al tipo image, toma el valor null, no se porqué y entonces no le asigna nada... Creo que voy a desistir y a probar el método de almacenar solo la dirección local de la imágen.
137  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 15 Junio 2010, 12:20 pm
ya me funciona tu programa D4N93R, a ver si consigo aplicarlo al mio, pero veo un inconveniente que yo no tengo un listview de esos, y entonces como puedo usar el foreach????
138  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 14 Junio 2010, 22:08 pm
Lool, no me funciona tu programa. xD
139  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 14 Junio 2010, 18:04 pm
Acá te dejo esto que acabo de hacer, espero te funcione:

Código C#:
http://pastebin.com/Vp1XLfit

Código del component del formulario:
Código
  1.        private System.Windows.Forms.PictureBox pictureBox1;
  2.        private System.Windows.Forms.Button button1;
  3.        private System.Windows.Forms.ListView listView1;
  4.        private System.Windows.Forms.Button button2;
  5.        private System.Windows.Forms.TextBox m_imageTitle;
  6.        private System.Windows.Forms.Label label1;
  7.  

Base de datos
Una tabla, llamada Image, con las siguientes columnas:

- ID identiy decimal
- Title varchar
- ImageData de tipo Image.


PD: disculpa que no tiene comentarios, y los controles tienen el nombre por defecto, pero no tengo mucho tiempo ahora. Si tienes una duda no dudes en consultar..

Saludos

Muchas gracias voy a mirarlo a ver.

una pregunta. Es necesario guardar un nombre para imagen?? porque yo solamente guardo el campo imagen y veo que tu y más gente creais tres campos... esque yo tengo una tabla con todos los datos del contacto (nombre, apellidos... ) y uno de ellos es un campo (imagen image). Con eso debería servir no???.-

Salu2. y gracias,
140  Programación / .NET (C#, VB.NET, ASP) / Re: Guardar Imagen en base de datos. (c#) en: 14 Junio 2010, 15:58 pm
Esta bien a menos que sepas leer una imagen en hexadecimal a simple vista :silbar:

yo te digo que lo pongas en un picturebox ysi se ve la imagen, es porque el error esta en otro lado. Sino se ve, esporque pusiste mal la imagen :P

Esque no me carga, porque da error.

Cuando yo al principio selecciono la imágen en un picture box para guardarla luego en la base de datos lo hace bien. Luego al leerla y sacarla a otro picturebox ya no funciona bien. Y la imágen parece que la coge bien de la base de datos... pero vete tu a saber...
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines