Volvemos al tema de las imágenes en la bdd. (c#) [SOLUCIONADO]

Iniciado por Hartigan, 1 Julio 2010, 16:49 PM

0 Miembros y 2 Visitantes están viendo este tema.

Hartigan

EDITO:

Problema: Problema al actualizar la base de datos habiendo cambiado la imagen almacenada.

Solución: El error estaba en la sentencia sql:

yo tenía esto:
Código (csharp) [Seleccionar]

... datos[34] + "',imagen = '@img' WHERE apodo = 'litos001'";



y la solución es quitar las comillas del @img de manera que queda así:
Código (csharp) [Seleccionar]

...datos[34] + "',imagen = @img WHERE apodo = 'litos001'";


Espero que ahora quede claro

Salu2.

Novlucker

Permiteme algunos comentarios respecto al código:
Dado que estas actualizando un contacto, intenta utilizar objetos, de este modo lograrás un código más legible y evitas tener esas sentencias sql con array[1], array[2], etc
Podrías utilizar procedimientos almacenados en la bbdd, por lo mismo de esas sentencias.

Sobre el error:
¿Has verificado que el contenido de img sea correcto?
¿Qué versión de .NET estas utilizando?
¿Qué tipo de imagen debería de ser?

Intenta de este modo ...
Código (csharp) [Seleccionar]
System.IO.MemoryStream derec = new System.IO.MemoryStream(img);
pictureBox_FotoImagen.Image = Image.FromStream(derec);


Ahora no puedo probar, así que podría estar igual de mal :xD

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]

Todo eso ya se le ha dicho en su post anterior. Mi recomendación es que reescriba el proyecto utilizando un modelo de componentes eficiente con procedimientos almacenados.

Saludos!

Hartigan

Gracias por las respuestas y recomendaciones pero os comento mi situación., Es la primera vez que programo en c# y ando un poco perdido, ya que en la uni solo me han enseñado c... entonces no se muy bien como usar los objetos. Sí la teoría más o menos la se, o se cosas de lo que he leido por ahí, de curso de c# que tiene guille, pero en la practica real ando un poco pez. si me ayudais un ppoco con algun ejemplo o me aclarais un poco más empezaría de nuevo gustosamente porque se que así no está del todo bien.

Salu2 y gracias.

[D4N93R]


Hartigan

#5
Cita de: D4N93R en  1 Julio 2010, 17:56 PM
En la wiki hay varios temas buenos sobre .Net que deberías leer.
http://wiki.elhacker.net/programacion

Con respecto a la programación orientada a objetos
http://www.codersource.net/microsoft-net/c-basics-tutorials/oop-c-net.aspx



gracias por los enlaces. xD

osea con lo de los objetos, yo craría un objeto que contendría las variables y en la sentencia sql solo tendría que pasarle el objeto?? o como?

y sobre mi problema. nevolucker, he probado lo que me has dicho y me sigue pasando lo mismo.

[D4N93R]

Exacto! Normalmente creas una clase por cada tabla, dependiendo del modelo que estés haciendo. Ahora, en este caso tienes una tabla llamada contactos (Yo personalmente pongo los nombres de las tablas en singular, pero bueno cada quien con sus gustos) y bueno tienes que crear una clase Contacto (Obligatoriamente en singular, plurales son para las listas, colecciones, arrays, etc)

Entonces esa clase tiene una propiedad por cada campo en la base de datos. Y además tienes que tener un método save, o algo por el estilo que encapsule la forma de guardar los datos en la base de datos. Además obviamente tienes que tener tu clase de acceso a datos..

Saludos

Novlucker

CitarSobre el error:
¿Has verificado que el contenido de img sea correcto?
¿Qué versión de .NET estas utilizando?
¿Qué tipo de imagen debería de ser?
:rolleyes:

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Hartigan

Cita de: D4N93R en  1 Julio 2010, 18:46 PM
Exacto! Normalmente creas una clase por cada tabla, dependiendo del modelo que estés haciendo. Ahora, en este caso tienes una tabla llamada contactos (Yo personalmente pongo los nombres de las tablas en singular, pero bueno cada quien con sus gustos) y bueno tienes que crear una clase Contacto (Obligatoriamente en singular, plurales son para las listas, colecciones, arrays, etc)

Entonces esa clase tiene una propiedad por cada campo en la base de datos. Y además tienes que tener un método save, o algo por el estilo que encapsule la forma de guardar los datos en la base de datos. Además obviamente tienes que tener tu clase de acceso a datos..

Saludos

si si sis, mira, yo lo que tengo es lo siguiente: una clase, gestor_contacto, para gestionar los contactos, una clase contacto donde se realizan las operaciones principales set y get, y luego un par de clases para acceder ala fuente de datos siguiendo el esquema del patrón dao, más bien la factoria dao... Entonces lo que me faltaría sería el usar los objetos que no se bien del todo como hacerlo. xDD (me dan ganas de pasarte mi proyecto para que le heches un ojo y veas de lo que te hablo)

Cita de: Novlucker en  1 Julio 2010, 19:06 PM
CitarSobre el error:
¿Has verificado que el contenido de img sea correcto?
¿Qué versión de .NET estas utilizando?
¿Qué tipo de imagen debería de ser?
:rolleyes:

Saludos


Perdón por no haber contestado a las preguntas, se me pasaron.

Desde la base de datos la imágen parece que se paa bien. estoy usando visual studio 2008 y el framwork 3.5 con sus actualizaciones.

la imagen es un jpg normal y corriente, que antes hago una conversión para poder almacenarlo en la base de datos tal cual me dijeron aquí: http://foro.elhacker.net/net/guardar_imagen_en_base_de_datos_c-t296587.45.html

Entonces la primera vez que lo hago, se me guarda bien y la leo bien, pero la segunda vez yo creo que no la guardo bien, o que no la actualiza bien con esa sentencia sql, que aunque no me da error y parece que algo guarda pero no lo hace bien.... no lo se...

saludos y gracias ;)

Hartigan

Vale chicos, el problema es ni más ni menos la sentencia sql que hago para actualziar los datos, lo que estoy haciendo es guardar una cadena convertida a byte... osea la cadena '@img' por eso al leer me da un byte[4] en lugar de un byte[3256] que es lo que debería de guardar... a ver si alguien me puede ayudar a hacer esa sentencia en condiciones, mientras aprendo a usar los objetos.. xD

salu2 ;)