Guardar Imagen en base de datos. (c#)

Iniciado por Hartigan, 13 Junio 2010, 20:25 PM

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

43H4FH44H45H4CH49H56H45H

Cita de: D4N93R en 14 Junio 2010, 02:19 AM
Si vas a almacenar las imágenes, o cualquier archivo dentro de la base de datos es mejor que lo hagas en otra particion o disco, por que? Defragmentación de indices y data, espacio en disco, condiciones del servidor, etc. Normalmente en apliaciones grandes el webserver está separado de la base de datos, en aplicaciones grandes,  por el mismo motivo.

Otros motivos? Muchos son relevantes o irrelevantes según el escenario.


  • Backup, tomar en cuenta el tamaño del la BD.
  • Es mucho más fácil acceder las imágenes desde el file system. COmo por ejemplo para verlas, o abrir algún documento
  • Muchos hosting cobrab adicional por el espacio en BD

Encontré también algunos links:

http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for-a-web-app

Ahora, dependiendo del escenario puedes almacenar archivos en la base de datos, pero, te recomiendo que hagas que la base de dato almacene esa columna en otro disco.


Cita de: 43H4FH44H45H4CH49H56H45H en 14 Junio 2010, 00:15 AMAhora @D4N93R podrias indicarme un enlace o referencia de porque esta fuera de las buenas practicas el almacenar imagenes dentro de una BD.

Al parecer no sabes ni lo que dicen en el enlace que pusiste, por ese motivo te cito lo que pregunte, y al parecer para alguien que:

Cita de: D4N93R en 14 Junio 2010, 02:19 AM@43H4FH44H45H4CH49H56H45H, he desarrollados muchos sistemas de negocios, aplicaciones, consultorías y asesorías, he respondido a la mayoría problemas de mis clientes, y he sido testigo del problema de almacenar imagenes y archivos en la base de datos.

y no tiene la capacidad de entender una simple pregunta  :rolleyes:

El tema trata de Guardar Imagen en base de datos. (c#) y no de tu supuesta "experiencia" que me causa sueño la verdad  ;D

Deberias tratar de entender lo que dicen en el enlace que pusiste que solo trata de un tema en particular de almacenamiento y no en general.

Por cierto el mejor lugar para buscar información de determinada plataforma (en este caso .NET) es el lugar donde estan los desarrolladores y personal del mismo.

No iria a preguntar cosas de MSSQL al foro de MySql  :laugh:

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

[D4N93R]

Tampoco puedo ayudarlo si ni quiera me dice si es Windows Form o Web Applications.


Citar
El tema trata de Guardar Imagen en base de datos. (c#) y no de tu supuesta "experiencia" que me causa sueño la verdad  

Deberias tratar de entender lo que dicen en el enlace que pusiste que solo trata de un tema en particular de almacenamiento y no en general.

No estoy aquí para discutir nada, simplemente para aportar. Tu crees que el almancenamieto no es un punto importante? o crees que es irrelevante? No voy a pasar toda la tarde buscando fuentes de todos y cada uno de los puntos en pro y en contra de subir archivos a una base de datos, simplemente fue un ejemplo.

CitarPor cierto el mejor lugar para buscar información de determinada plataforma (en este caso .NET) es el lugar donde estan los desarrolladores y personal del mismo.

Recomendaciones por parte de Microsoft? por favor, que ni ellos saben que es lo que los desarrolladores necesitan, LINQ? muy bonito pero lento. WPF, suena bien, pero no es la vía. Por lo que un sitio con evangelistas de microsoft no siempre es el mejor lugar para buscar respuestas.

Quieres soluciones compruébalo por ti mismo: Una solución es relativa y depende mucho del escenario. Por eso es que hay varias formas de hacer las cosas, son herramientas y tu escoges la que más necesites.

CitarNo iria a preguntar cosas de MSSQL al foro de MySql

Pues si es una pregunta que no tiene nada que ver con la base de datos en si, sino con el tema en general, no hay problema en hacerlo.

raul338

Che che bajen un cambio que se va a mayores esto :xD

Guardar imagenes en la bd siempre fue mala practica, que hagan cosas para mejorarlo es otra cosa, pero una vez que tiene la fea mirada  es dificil sacarsela.

Es como los GOTOs del viejo vb, antes hacia ***** la pc usarlos, ahora ..... se pueden hacer muchas cosas... pero nadie los usa porque ya inculcaron que es malo usarlos

SQL 2008 lo que hizo al agregar el campo FILESTREAM fue automatizar el agregado de archivos, si vez como funciona, guarda como si fuera un disco NTFS, nada del otro mundo, solo que ahora lo administra el sql y no el usuario comun o administrador.

Creo que el Hartigan ya resolvio su duda, asi que quedaria terminado esto, salvo que el diga lo contrario :P

Hartigan

#13
43H4FH44H45H4CH49H56H45H  muchas gracias, voy a probar a ver si me funciona lo que me has dicho.

D4N93R   perdona, tienes razón que no expliqué lo que era. Es un windows form. xD gracias.

raul338   como puse arriba sigo teniendo problemas. Voy a probar lo que me ha dicho el compañero a ver si me funciona y os comento. xD


En cuanto a la discusión que llevais sobre almacenar imágenes o no en la bdd, no veo porqué es una mala practica el guardarlas. Veo mucho peor guardar solo la dirección. Si tu cambias la ímagen de sitio que haces??' como la recupera si ya no está en la dirección que tienes almacenada???.


Saludos ;) y gracias a todos.

Hartigan

Nada, no hay menera, me sigue diciendo que el parámetro no es válido...

raul338

Código (csharp) [Seleccionar]

//........
byte[] img = gestor_contacto.Obtener_Imagen_Contacto(factoriaDAO);
//..........

Estas seguro de que eso es una imagen?
Ponlo en un picturebox de prueba aver si sale :P


Cita de: Hartigan en 14 Junio 2010, 12:18 PM
En cuanto a la discusión que llevais sobre almacenar imágenes o no en la bdd, no veo porqué es una mala practica el guardarlas. Veo mucho peor guardar solo la dirección. Si tu cambias la ímagen de sitio que haces??' como la recupera si ya no está en la dirección que tienes almacenada???.
La idea es que el directorio sea intocable :xD

43H4FH44H45H4CH49H56H45H

#16
Cita de: Hartigan en 14 Junio 2010, 13:26 PM
Nada, no hay menera, me sigue diciendo que el parámetro no es válido...

Primero haz una prueba aparte solo con una imagen, es mas fácil localizar el error.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

43H4FH44H45H4CH49H56H45H

Cita de: raul338 en 14 Junio 2010, 06:42 AM
Che che bajen un cambio que se va a mayores esto :xD

No pasa nada  :P , tan solo es un debate  ;D

Cita de: D4N93R en 14 Junio 2010, 06:05 AMNo estoy aquí para discutir nada, simplemente para aportar. Tu crees que el almancenamieto no es un punto importante? o crees que es irrelevante? No voy a pasar toda la tarde buscando fuentes de todos y cada uno de los puntos en pro y en contra de subir archivos a una base de datos, simplemente fue un ejemplo.


Quieres soluciones compruébalo por ti mismo: Una solución es relativa y depende mucho del escenario. Por eso es que hay varias formas de hacer las cosas, son herramientas y tu escoges la que más necesites.

Y es lo que puse en el 1er enlace y la respuesta que la acompañaba (donde hablan de pruebas que deben hacerse y demás), la cual es similar al enlace que diste (que son opiniones). Y llegamos al punto de inicio y sigues repitiendo lo que ya estaba claro, que no aporta nada nuevo al tema  :-\

Cita de: D4N93R en 14 Junio 2010, 06:05 AMRecomendaciones por parte de Microsoft? por favor, que ni ellos saben que es lo que los desarrolladores necesitan, LINQ? muy bonito pero lento. WPF, suena bien, pero no es la vía. Por lo que un sitio con evangelistas de microsoft no siempre es el mejor lugar para buscar respuestas.

Como ejemplo: Si alguien X adquiere un programa, y necesita una solucion del mismo buscara primero al creador del programa o se ira a perder horas en internet preguntando una solución (claro alguien habra que sepa mejor que el creador acerca de ese programa).

Es obvio no?  :rolleyes:

Cita de: D4N93R en 14 Junio 2010, 06:05 AM
CitarNo iria a preguntar cosas de MSSQL al foro de MySql

Pues si es una pregunta que no tiene nada que ver con la base de datos en si, sino con el tema en general, no hay problema en hacerlo.

Hablo de MSSQL no de SQL  :rolleyes:

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Hartigan

Cita de: raul338 en 14 Junio 2010, 14:27 PM
Código (csharp) [Seleccionar]

//........
byte[] img = gestor_contacto.Obtener_Imagen_Contacto(factoriaDAO);
//..........

Estas seguro de que eso es una imagen?
Ponlo en un picturebox de prueba aver si sale :P


Cita de: Hartigan en 14 Junio 2010, 12:18 PM
En cuanto a la discusión que llevais sobre almacenar imágenes o no en la bdd, no veo porqué es una mala practica el guardarlas. Veo mucho peor guardar solo la dirección. Si tu cambias la ímagen de sitio que haces??' como la recupera si ya no está en la dirección que tienes almacenada???.
La idea es que el directorio sea intocable :xD


Eso son los bytes de la imagen. Luego hago la conversión. Lo de la factoria es porque llamo a un método que accede a a la base de datos usando el patrón dao.

Gracias por las respuestas. Voy a probar por separado como dice el compañero a ver si saco algo.

Hartigan

Esque depurando el programa me sale que lee bien la imágen de la base de datos, pero al llegar al punto de convertirla da el error...

Aquí dejo una captura: http://img714.imageshack.us/img714/7483/programe.png

en ese momento de la depuración ya se han obtenido los datos y procedo a continuación a pasarlos a sus correspondientes controles como podeis ver...

Salu2.