Problema sin solucion - Imagenes en una Base de Datos

16/11/2006 - 02:53 por German | Informe spam
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el path
donde la subo y anda ok. Pero se me ocurrio probar de guardar la imagen
completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo que
me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una imagen
desde sqlserver 2000?

Gracias

Preguntas similare

Leer las respuestas

#1 Bela Istok
16/11/2006 - 04:36 | Informe spam
Que version de Visual estas Usando, 2005?

Saludos,

Bela Istok
"German" wrote in message
news:
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el
path donde la subo y anda ok. Pero se me ocurrio probar de guardar la
imagen completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo
que me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una
imagen desde sqlserver 2000?

Gracias

Respuesta Responder a este mensaje
#2 Bela Istok
16/11/2006 - 04:43 | Informe spam
Esto lo tengo hecho en vs 2005, asp.net 2.0 (no se si funcione en el 1.1),
lo que hago es cada ves que quiero una foto llamo al PhotoHandler y el se
encarga de mostrar la imagen:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Web;

/// <summary>
/// Summary description for PhotoManager
/// </summary>
public static class PhotoManager
{
public static Stream GetFirstPhoto(int albumid,long ticketNumber, PhotoSize
size)
{
// Declare the connection string
string connectionString =
ConfigurationManager.ConnectionStrings["Production"].ToString(); ;

// Create a new Sql connection
SqlConnection con = new SqlConnection(connectionString);

// Create a Sql command of stored procedure type with our connection
SqlCommand cmd = new SqlCommand("ReportPictures", con);

// Specify the type of command
cmd.CommandType = CommandType.StoredProcedure;

// Create a SqlParameter to attach to the command
SqlParameter param1 = new SqlParameter("@LocalId", albumid);

// Attach the parameter to the command
cmd.Parameters.Add(param1);

con.Open();
SqlDataReader reader = cmd.ExecuteReader();
byte[] buffer;
MemoryStream streamPicture = new MemoryStream();
if (reader.Read())
{
buffer = (byte[])reader[0];
streamPicture = new MemoryStream(buffer);
}

con.Close();
if (streamPicture.Length != 0)
{
return ResizeImageFile(streamPicture, size);
}
else
{
return null;
}
}
public static Stream GetPhoto(PhotoSize size)
{
string path = HttpContext.Current.Server.MapPath("~/Images/");
switch (size)
{
case PhotoSize.Small:
path += "placeholder-100.jpg";
break;
case PhotoSize.Medium:
path += "placeholder-200.jpg";
break;
case PhotoSize.Large:
path += "placeholder-600.jpg";
break;
default:
path += "placeholder-100.jpg";
break;
}

return new FileStream(path, FileMode.Open, FileAccess.Read,
FileShare.Read);
}

private static Stream ResizeImageFile(Stream imageFile, PhotoSize Size)
{
int targetSize = 100;
switch (Size)
{
case PhotoSize.Small:
targetSize = 100;
break;
case PhotoSize.Medium:
targetSize = 198;
break;
case PhotoSize.Large:
targetSize = 600;
break;
case PhotoSize.Original:
targetSize = 320;
break;
default:
targetSize = 100;
break;
}
using (System.Drawing.Image oldImage =
System.Drawing.Image.FromStream(imageFile))
{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width,
newSize.Height, PixelFormat.Format24bppRgb))
{
using (Graphics canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode =
InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0,
0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m;
}
}
}
}

private static Size CalculateDimensions(Size oldSize, int targetSize)
{
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
{
newSize.Width = (int)(oldSize.Width * ((float)targetSize /
(float)oldSize.Height));
newSize.Height = targetSize;
}
else
{
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize /
(float)oldSize.Width));
}
return newSize;
}
}
"German" wrote in message
news:
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el
path
donde la subo y anda ok. Pero se me ocurrio probar de guardar la imagen
completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo
que
me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una
imagen
desde sqlserver 2000?

Gracias






begin 666 PhotoHandler.ashx
M/"5 (%èDAA;F1L97(@3&%N9W5A9V4](D,C(B!#;&%S<STB4&AO=&](86YD
M;&5R(B E/@T*#0IU<VEN9R!3>7-T96T[#0IU<VEN9R!3>7-T96TN5V5B.PT*
M=7-I;F<@4WES=&5M+DE/.PT*#0IP=6)L:6,@8VQA<W,@4&AO=&](86YD;&5R
M(#='!(86YD;&5R#0I[#0H-"B @("!P=6)L:6,@=F]I9"!0<F]C97-S
M4F5QeS="A(='1P0V]N=&5X="!C;VYT97AT*0T*(" @('L-"B @(" @(" @
M+R\@4V5T('5P('1H92!R97-P;VYS92!S971T:6YG<PT*(" @(" @("!C;VYT
M97AT+E)E<W!O;G-E+D-O;G1E;G14>7!E(#T@(FEM86=E+VIP96<B.PT*(" @
M(" @("!C;VYT97AT+E)E<W!O;G-E+D-A8VAE+E-E=$-A8VAE86)I;&ET>2A(
M='1P0V%C:&5A8FEL:71Y+E!U8FQI8RD[#0H@(" @(" @(&-O;G1E>'0N4F5S
M<&]N<V4N0G5F9F5R3W5T<'5T(#%L<V4[#0H@(" @(" @("\O(%-E='5P
M('1H92!3:7IE(%!A<F%M971E<@T*(" @(" @("!0:&]T;U-I>F4@<VEZ93L-
M"B @(" @(" @<W=I=&-H("AC;VYT97AT+E)E<75E<W0N475E<GE3=')I;F=;
M(E-I>F4B72D-"B @(" @(" @>PT*(" @(" @(" @(" @(" @( T*(" @(" @
M(" @(" @8V%S92 B4R(Z#0H@(" @(" @(" @(" @(" @<VEZ92 ](%!H;W1O
M4VEZ92Y3;6%L;#L-"B @(" @(" @(" @(" @("!B<F5A:SL-"B @(" @(" @
M(" @(&-A<V4@(*(" @(" @(" @(" @(" @('-I>F4@/2!0:&]T;U-I
M>F4N365D:75M.PT*(" @(" @(" @(" @(" @(&)R96%K.PT*(" @(" @(" @
M(" @8V%S92 B3"(Z#0H@(" @(" @(" @(" @(" @<VEZ92 ](%!H;W1O4VEZ
M92Y,87)G93L-"B @(" @(" @(" @(" @("!B<F5A:SL-"B @(" @(" @(" @
M(&1E9F%U;'0Z#0H@(" @(" @(" @(" @(" @<VEZ92 ](%!H;W1O4VEZ92Y/
M<FEG:6YA;#L-"B @(" @(" @(" @(" @("!B<F5A:SL-"B @(" @(" @?0T*
M(" @(" @(" O+R!3971U<"!T:&&AO=&])1"!087)A;65T97(-"B @(" @
M(" @26YT,S(@:60@/2 M,3L-"B @(" @(" @26YT-C0@=&EC:V5T3G5M8F5R
M.PT*(" @(" @("!3=')E86T@<W1R96%M(#T@;G5L;#L-"B @(" @(" @<W1R
M:6YG('!H;W1O260@/2!C;VYT97AT+E)E<75E<W0N475E<GE3=')I;F=;(E!H
M;W1O240B73L-"B @(" @(" @:68@*"%S=')I;F<N27-.=6QL3W)%;7!T>2AP
M:&]T;TED*2D-"B @(" @(" @>PT*(" @(" @(" @(" @:60@/2!#;VYV97)T
M+E1O26YT,S(H8V]N=&5X="Y297%U97-T+E%U97)Y4W1R:6YG6R)0:&]T;TE$
M(ETI.PT*(" @(" @(" @(" @<W1R96%M(#&AO=&]-86YA9V5R+D=E=%!H
M;W1O*&ED+"!S:7IE*3L-"B @(" @(" @?0T*(" @(" @("!E;'-E#0H@(" @
M(" @('L-"B @(" @(" @(" @(&ED(#]NõR="Y4;TEN=#,R*&-O;G1E
M>'0N4F5QeS="Y1eR>5-T<FEN9ULB06QB=6U)1")=*3L-"B @(" @(" @
M(" @('1I8VME=$YU;6)E<B ]($-O;G9E<G0N5&]);G0V-"AC;VYT97AT+E)E
M<75E<W0N475E<GE3=')I;F=;(E1I8VME=$YU;6)E<B)=*3L-"B @(" @(" @
M(" @('-T<F5A;2 ](%!H;W1O36%N86=E<BY'971&:7)S=%!H;W1O*&ED+"!T
M:6-K971.=6UB97(L('-I>F4I.PT*(" @(" @("!]#0H@(" @(" @("\O($=E
M="!T:&4@<&AO=&\@9G)O;2!T:&&%T86)A<V4L(&EF(&YO=&AI;F<@:7,@
M<F5T=7)N960L(&=E="!T:&&5F875L=" B<&QA8V5H;VQD97(B('!H;W1O
M#0H@(" @(" @(&EF("AS=')E86T@/3T@;G5L;"D@<W1R96%M(#&AO=&]-
M86YA9V5R+D=E=%!H;W1O*'-I>F4I.PT*(" @(" @(" O+R!7<FET92!I;6%G
M92!S=')E86T@=&\@=&AE(')E<W!O;G-E('-T<F5A;0T*#0H@(" @(" @(" @
M("!S=')E86TN4V5E:+"!3965K3W)I9VEN+D)E9VEN*3L-"B @(" @(" @
M(" @(&-O;G-T(&EN="!BiF97)S:7IE(#T@,3 R-" J(#$V.PT*(" @(" @
M(" @(" @8GET95M=(&)U9F9E<B ](&YE=R!B>71E6V)U9F9E<G-I>F5=.PT*
M(" @(" @(" @(" @:6YT(&-O=6YT(#T@<W1R96%M+E)E860H8G5F9F5R+" P
M+"!BiF97)S:7IE*3L-"B @(" @(" @(" @('=H:6QE("AC;W5N=" ^(# I
M#0H@(" @(" @(" @("![#0H@(" @(" @(" @(" @(" @8V]N=&5X="Y297-P
M;VYS92Y/qPq3=')E86TN5W)I=&4H8G5F9F5R+" P+"!C;W5N="D[#0H@
M(" @(" @(" @(" @(" @8V]U;G0@/2!S=')E86TN4F5A9"ABiF97(L(# L
M(&)U9F9E<G-I>F4I.PT*(" @(" @(" @(" @?0T*(" @('T-"@T*(" @('!U
M8FQI8R!B;V]L($ES4F5U<V%B;&4-"B @("![#0H@(" @(" @(&=E= T*(" @
M(" @("![#0H@(" @(" @(" @("!R971U%L<V4[#0H@(" @(" @('T-
+"B @("!]#0H-"GT`
`
end

begin 666 PhotoSize.cs
M=7-I;F<@4WES=&5M.PT*=7-I;F<@4WES=&5M+D1A=&$[#0IU<VEN9R!3>7-T
M96TN0V]N9FEG=7)A=&EO;CL-"G5S:6YG(%-Y<W1E;2Y796([#0IU<VEN9R!3
M>7-T96TN5V5B+E-E8W5R:71Y.PT*=7-I;F<@4WES=&5M+EèBY523L-"G5S
M:6YG(%-Y<W1E;2Y796(N54DN5V5B0V]N=')O;',[#0IU<VEN9R!3>7-T96TN
M5V5B+E5)+EèD-O;G1R;VQS+EèE!A<G1S.PT*=7-I;F<@4WES=&5M+E=E
M8BY522Y(=&UL0V]N=')O;',[#0H-"B\O+R \<W5M;6%R>3X-"B\O+R!3=6UM
M87)Y(&1E<V-R:7!T:6]N(&9O<B!0:&]T;U-I>F4-"B\O+R \+W-U;6UA<GD^
M#0IP=6)L:6,@96YU;2!0:&]T;U-I>F4-"GL-"B @(" O+R\@/'-U;6UA<GD^
M#0H@(" @+R\O(#$P,'!X#0H@(" @+R\O(#PO<W5M;6%R>3X-"B @("!3;6%L
M;" ](#$L#0H@(" @+R\O(#QS=6UM87)Y/@T*(" @("\O+R Q.3AP> T*(" @
M("\O+R \+W-U;6UA<GD^#0H@(" @365D:75M(#T@,BP-"B @(" O+R\@/'-U
M;6UA<GD^#0H@(" @+R\O(#8P,'!X#0H@(" @+R\O(#PO<W5M;6%R>3X-"B @
M("!,87)G92 ](#,L#0H@(" @+R\O(#QS=6UM87)Y/@T*(" @("\O+R!/<FEG
M:6YA;"!3:7IE#0H@(" @+R\O(#PO<W5M;6%R>3X-"B @("!/<FEG:6YA;" ]
%(#0-"GT`
`
end
Respuesta Responder a este mensaje
#3 [Juanjo]
16/11/2006 - 09:16 | Informe spam
Yo uso estas dos funciones para insertar y recuperar las imagenes:

static public void insertaImagen(string img, string tabla, int clave)
{
OleDbConnection conn = abreConexion(); //FUNCION QUE ABRE UNA CONEXION CON
LA BD
string sql = "Select * From " + tabla + " where clave=" + clave.ToString();
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
OleDbCommandBuilder MyCB = new OleDbCommandBuilder(da);
DataTable datos = new DataTable(tabla);
FileStream fs = new FileStream(@img, FileMode.OpenOrCreate,
FileAccess.Read);
byte[] MyData = new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
da.Fill(datos);
datos.Rows[0]["logo"] = MyData;
da.Update(datos);
cierraConexion(conn);//FUNCION QUE CERRA LA CONEXION CON LA BD
}

//EN ESTE CASO EN DATOS TIENES QUE TENER TODOS LOS DATOS DE LA TABLA
//EN UNA CONSULTA ANTERIOR O BIEN CAMBIARLO POR UN DATAROW CON
//EL REGISTRO DEL QUE TE INTERESA RECUPERAR LA IMAGEN
static public Image recuperaImagen(DataTable datos, string campo, int pos)
{
byte[] MyData = new byte[0];
Image img;
try
{
MyData = (byte[])datos.Rows[pos][campo];
int ArraySize = new int();
ArraySize = MyData.GetUpperBound(0);
MemoryStream memoria = new MemoryStream(MyData);
img= System.Drawing.Image.FromStream(memoria);
}
catch
{
img = null;
}
return img;
}


Espero te ayude.
Saludos

"German" escribió en el mensaje
news:
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el
path donde la subo y anda ok. Pero se me ocurrio probar de guardar la
imagen completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo
que me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una
imagen desde sqlserver 2000?

Gracias

Respuesta Responder a este mensaje
#4 Quim
16/11/2006 - 09:24 | Informe spam
Hola German,

En la revista DotNetMania www.dotnetmania.com de Septiembre nº 29 publica
un artículo <Portal de noticas ASP.NET> por cierto ganador de un concurso en
www.vb-mundo.com.

Está realizado en C# ASP.NET 2.0 ý detalla como mostrar imágenes
provenientes de la BB.DD.

Saludos.


"German" escribió en el mensaje
news:
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el
path donde la subo y anda ok. Pero se me ocurrio probar de guardar la
imagen completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo
que me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una
imagen desde sqlserver 2000?

Gracias

Respuesta Responder a este mensaje
#5 German
16/11/2006 - 12:16 | Informe spam
Gracias a todos por las respuestas, hoy mismo probare las soluciones.

German.
La Plata - Buenos Aires - Argentina
"German" escribió en el mensaje
news:
Hola a todos, necesitaria que alguien me de una mano ya que me encuentra a
la deriva.
Resulta que tengo una aplicacion Web que sube informacion sobre personas
(distintos datos personales) y a su vez guarda varias fotos de la persona.
Hasta aca todo bien. Lo que hice fue guardar el nombre de la foto y el
path donde la subo y anda ok. Pero se me ocurrio probar de guardar la
imagen completa en SqlServer 2000 en una campo Image.
Guardarlo perfecto, hasta diria secillo, pero el problemita lo tengo al
momento de recuperar la foto desde la base. Lei de todo en la web, desde
armar la imagen en un form nuevo, etc, pero lo que necesito es cargar lo
que me devuelve la consulta a la base en un objeto image. Estuve viendo un
ejemplo en la web donde al objeto image le ponen una pagina aspx donde
realmente se arma la matriz de bytes, no me anduvo.
Alguno me podria decir cual es la manera mas sencilla de levantar una
imagen desde sqlserver 2000?

Gracias

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida