Foros del Web » Programación para mayores de 30 ;) » .NET »

Guardar imagenes en asp.net

Estas en el tema de Guardar imagenes en asp.net en el foro de .NET en Foros del Web. Hola a todos, tengo la siguiente duda, basandome en un ejemplo para guardar datos incluido una imagen en una base de datos estoy usando el ...
  #1 (permalink)  
Antiguo 14/11/2012, 16:14
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Guardar imagenes en asp.net

Hola a todos, tengo la siguiente duda, basandome en un ejemplo para guardar datos incluido una imagen en una base de datos estoy usando el siguiente metodo donde el image es ImagenFile

protected void btnEnviar_Click(object sender, EventArgs e)
{
string sFile = string.Empty;



// Comprobamos que existe fichero y que no estavacio
if ((ImagenFile.PostedFile != null) && (ImagenFile.PostedFile.ContentLength> 0))
{
//obtener archivos subidos
HttpPostedFile ImgFile = ImagenFile.PostedFile;
// crear el array
// Almacenamos la imagen en una variable para insertarla en la bd.//buscar la longitud y convertir en longitud byte
Byte[] byteImage = newByte[ImagenFile.PostedFile.ContentLength];
//cargado en una matriz de bytes
ImgFile.InputStream.Read(byteImage, 0, ImagenFile.PostedFile.ContentLength);

string sql = "insert into Tabla(Descripcion, Imagen)";
sql += " Values(@Descripcion, @Imagen)";



SqlConnection SqlConn = new SqlConnection("Server=(local);DataBase=dbimages;In tegrated Security=sspi");
SqlCommand SqlCom = new SqlCommand(sql, SqlConn);

SqlCom.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 150);
SqlCom.Parameters["@Descripcion"].Value = txtTitulo.Text;
SqlCom.Parameters.Add("@Imagen", System.Data.SqlDbType.Image);
SqlCom.Parameters["@Imagen"].Value = byteImage; //byteImage;

SqlConn.Open();
SqlCom.ExecuteNonQuery();
// //SqlConn.Close();

SqlCommand SqlCom1 = new SqlCommand("Select MAX(Id) From tabla", SqlConn);

string lastID = SqlCom1.ExecuteScalar().ToString();

SqlConn.Close();

// se direcciona a la pagina mostrar para ver la imagen insertada
Response.Redirect("mostrar.aspx?ID=" + lastID);
}
}
en el siguiente codigo tengo solo una duda, la propiedad postedfile no la toma en cuenta el ide, uso visual studio 2008, cual podria ser la solucion a esto? me esta faltando alguna directiva using? agradesco cualquier ayuda, saludos.
  #2 (permalink)  
Antiguo 14/11/2012, 16:57
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: Guardar imagenes en asp.net

Cita:
donde el image es ImagenFile
Jamas vas a encontrar la propiedad PostedFile en un objeto de tipo IMAGE, para hacer upload de archivos lo debes hacer con un control de tipo File

Código:
<asp:FileUpload id="FileUpload1"
           runat="server">
        </asp:FileUpload>
Te paso un link para una mejor referencia:

FileUpload.PostedFile

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 15/11/2012, 03:58
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Exclamación Respuesta: Guardar imagenes en asp.net

muchas gracias por responder, gracias a ti pude deguir avanzando en mi proyecto, pero me surgio otra duda, tengo dos clases, o sea, dos form donde uno es que el guarda en la base de datos incluida una foto y otro form q la lee, no estoy seguro que guarda la foto ya que haciendo el select me muestra todos los datos pero no los tipicos codigos como garabatos que muestra en sql 2005 al hacer un select, la otra duda es en el otro form, al hacer click en el boton me arroja el siguiente mensaje .
Error 1 No se puede convertir el tipo 'System.Data.SqlClient.SqlDataReader' en 'byte[] adjunto los codigos de los 2 webform, saludos y gracias nuevamente por responder.

conn.Open();
string stFile = string.Empty;

//Comprobamos que existe el fichero y que no este vacio
if ((ImagenFile.PostedFile != null) && (ImagenFile.PostedFile.ContentLength > 0))
{
//Obtener archivos subidos
HttpPostedFile ImgFile = ImagenFile.PostedFile;
//Creal el array
//Almacenamos la imagen en una variable para insertarla en la bd
//Busca la longitud y convertir en longitud byte
Byte[] byteImage = new Byte[ImagenFile.PostedFile.ContentLength];
//Cargado en una matriz de bytes
//ImgFile.InputStream.Read(byteImage, ImagenFile.PostedFile.ContentLength);
ImgFile.InputStream.Read(byteImage, 0, ImagenFile.PostedFile.ContentLength);
string sql = "insert into cliente(rut,nombres,apellidos,direccion,telefono,m ovil,email,foto)Values(@rut,@nombres,@apellidos,@d ireccion,@telefono,@movil,@email,@foto)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@rut", System.Data.SqlDbType.Int);
cmd.Parameters["@rut"].Value = txtRut.Text;
cmd.Parameters.Add("@nombres", System.Data.SqlDbType.VarChar, 50);
cmd.Parameters["@nombres"].Value = txtNombres.Text;
cmd.Parameters.Add("@apellidos", System.Data.SqlDbType.VarChar, 50);
cmd.Parameters["@apellidos"].Value = txtApellidos.Text;
cmd.Parameters.Add("@direccion", System.Data.SqlDbType.VarChar, 50);
cmd.Parameters["@direccion"].Value = txtDireccion.Text;
cmd.Parameters.Add("@telefono", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["@telefono"].Value = txtTelefono.Text;
cmd.Parameters.Add("movil", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["movil"].Value = txtMovil.Text;
cmd.Parameters.Add("email", System.Data.SqlDbType.VarChar, 50);
cmd.Parameters["email"].Value = txtEmail.Text;
cmd.Parameters.Add("@foto", System.Data.SqlDbType.Image);
cmd.Parameters["@foto"].Value = byteImage;
cmd.ExecuteNonQuery();

//SqlCommand cmd2 = new SqlCommand("select MAX(rut) from cliente",conn);
//(string lastRut = cmd2.ExecuteScalar().ToString();
Response.Write(@"<script language='javascript'>alert('Cliente agregado satisfactoriamente');</script>");
//Response.Redirect("Default2.aspx?rut="+lastRut);

conn.Close();
//public object Image1 { get; set; }



}
else
{
Response.Write(@"<script language='javascript'>alert('Error al ingresar cliente');</script>");
}




---------------------------------


segundo webform

conn.Open();
Session["variableSesion"] = txtId.Text;
SqlCommand cmd = new SqlCommand("select * from usuarios where id='" + txtId.Text + "' and pass='" + txtPass.Text + "';", conn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read() == true)
{
Response.Redirect("frMenu.aspx");
}
else if (txtPass.Text == "" && txtId.Text == "")
{

}
else
{
Response.Write(@"<script language='javascript'>alert('Usuario no existe en nuestra base de datos');</script>");

}
conn.Close();



ayuda por favor, esto no me la puede ganar.
  #4 (permalink)  
Antiguo 15/11/2012, 16:53
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Guardar imagenes en asp.net

Help pliss, es una urgencia!!!!!
__________________
El amor mas fiel y duradero es el amor que uno se tiene.
  #5 (permalink)  
Antiguo 15/11/2012, 23:44
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: Guardar imagenes en asp.net

exactamente donde ocurre el error? en que momento? si omites ese campo la demás información se guarda bien? danos mas detalles
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 16/11/2012, 02:24
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Guardar imagenes en asp.net

Error 1 No se puede convertir el tipo 'System.Data.SqlClient.SqlDataReader' en 'byte[]' Ese es el error que me envia, en la siguiente linea de codigo:


string sql = "select * from cliente where rut =" + txtRutBuscar.Text + ";";
SqlConnection conn = new SqlConnection(@"Data Source=NICOLAS-PC\SQLEXPRESS;Integrated Security=True");
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
byte[] byteImage = (Byte[])cmd.ExecuteReader();

//byte n = Convert.ToByte(cmd.ExecuteReader());
//byte[] byteImage = n;

if (byteImage != null)
{
Response.ContentType = "image/jpeg";
Response.Expires = 0;
Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(byteImage);
Response.End();
}
conn.Close();

}

en esta para ser mas exactos: byte[] byteImage = (Byte[])cmd.ExecuteReader();

y el error que me lanza es:

Error 1 No se puede convertir el tipo 'System.Data.SqlClient.SqlDataReader' en 'byte[]' Ese es el error que me envia, en la siguiente linea de codigo:


Saludos y gracias por tu ayuda rootk
__________________
El amor mas fiel y duradero es el amor que uno se tiene.
  #7 (permalink)  
Antiguo 16/11/2012, 07:22
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Guardar imagenes en asp.net

Hola Darsk

Lo primero es recomendarte usar el Highlight del foro mira como se ve de bonito y facil de leer el codigo

Código C#:
Ver original
  1. string sql = "select * from cliente where rut =" + txtRutBuscar.Text + ";";
  2. SqlConnection conn = new SqlConnection(@"Data Source=NICOLAS-PC\SQLEXPRESS;Integrated Security=True");
  3. SqlCommand cmd = new SqlCommand(sql, conn);
  4. conn.Open();
  5. byte[] byteImage = (Byte[])cmd.ExecuteReader();
  6.  
  7. //byte n = Convert.ToByte(cmd.ExecuteReader());
  8. //byte[] byteImage = n;
  9.  
  10. if (byteImage != null)
  11. {
  12. Response.ContentType = "image/jpeg";
  13. Response.Expires = 0;
  14. Response.Buffer = true;
  15. Response.Clear();
  16. Response.BinaryWrite(byteImage);
  17. Response.End();
  18. }
  19. conn.Close();
  20.  
  21. }

Ahora si, viendo tu linea de error:
Código C#:
Ver original
  1. byte[] byteImage = (Byte[])cmd.ExecuteReader();

Puedes hacer la lectura de los datos llenando un DataTable

Luego lees la fila algo parecido a esto:

Código C#:
Ver original
  1. byte[] byteImage = myTabla.Rows[0]["foto"]

Ahora el error:
Error 1 No se puede convertir el tipo 'System.Data.SqlClient.SqlDataReader' en 'byte[]' Ese es el error que me envia, en la siguiente linea de codigo:

Este sale, porque estas asignando a tu variable byteImage que es de tipo byte[] y el cmd.ExecuteReader() no retorna este tipo de dato.

Lo que puedes hacer es algo como este ejemplo:

Código C#:
Ver original
  1. private static void CreateCommand(string queryString,
  2.     string connectionString)
  3. {
  4.     using (SqlConnection connection = new SqlConnection(
  5.                connectionString))
  6.     {
  7.         connection.Open();
  8.  
  9.         SqlCommand command = new SqlCommand(queryString, connection);
  10.         SqlDataReader reader = command.ExecuteReader();
  11.         while (reader.Read())
  12.         {
  13.             Console.WriteLine(String.Format("{0}", reader[0]));
  14.         }
  15.     }
  16. }

Mira que donde dice Console.Write estas accediendo a una posicion del reader, creo que esa posicion corresponde a cada una de las columnas que tiene la consulta.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #8 (permalink)  
Antiguo 16/11/2012, 16:57
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Guardar imagenes en asp.net

Código ASP:
Ver original
  1. byte[] byteImage = myTabla.Rows[0]["foto"]

me siguien lanzando un error, lo hice de este modo

Código ASP:
Ver original
  1. SqlConnection conn = new SqlConnection(@"Data Source=NICOLAS-PC\SQLEXPRESS;Integrated Security=True");
  2.  
  3.         conn.Open();
  4.         SqlCommand cmd = new SqlCommand();
  5.         cmd.CommandText = "clienteTodos";
  6.         cmd.Connection = conn;
  7.         cmd.CommandType = CommandType.StoredProcedure;
  8.         SqlDataAdapter da = new SqlDataAdapter(cmd);
  9.         DataTable dt = new DataTable();
  10.         da.Fill(dt);
  11.         SqlDataReader dr = cmd.ExecuteReader();
  12.         byte[] byteImage = Convert.ToByte(dt.Rows[7]["foto"]);
  13.  
  14.         while (dr.Read)
  15.         {
  16.            
  17.        
  18.         }
  19.  
  20.     }

pero me lanza el error no se puede convertir implicitamente el tipo byte en byte[] saludos y gracias por responder.
__________________
El amor mas fiel y duradero es el amor que uno se tiene.
  #9 (permalink)  
Antiguo 16/11/2012, 17:12
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Guardar imagenes en asp.net

El cmd.ExecuteReader(); si esta retornando datos?

Esto no deberia ir asi:?



Código C#:
Ver original
  1. while (dr.Read)
  2.         {
  3. byte[] byteImage = Convert.ToByte(dt.Rows[7]["foto"]);          
  4.        
  5.         }

Lo pregunto porque por lo general no uso el reader, cuando se trata de recuperar datos utilizo un DataTable para recuperar la informacion.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #10 (permalink)  
Antiguo 16/11/2012, 17:16
Avatar de Darsk  
Fecha de Ingreso: mayo-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Guardar imagenes en asp.net

Error 1 No se puede convertir el tipo 'System.Data.SqlClient.SqlDataReader' en 'byte[]'

ese es el error que me enviA,no me deja castaer al parecer por que es un arreglo de bytes.
__________________
El amor mas fiel y duradero es el amor que uno se tiene.
  #11 (permalink)  
Antiguo 16/11/2012, 23:19
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Guardar imagenes en asp.net

Entonces sigues haciendo la lectura del tipo de datos mal, porque estas tratando de asignar un Reader al tipo de datos byte[]

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #12 (permalink)  
Antiguo 17/11/2012, 07:29
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Guardar imagenes en asp.net

Hola Darsk, porqué mejor no alojas las imágenes en el path de tu web? Porque alojar las imágenes en el servidor SQL no es recomendable... Que opinas estimado jhonwilliams?, salvo que sea un proyecto académico y te lo soliciten así. Nos cuentas!.Saludos!:arrib:.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #13 (permalink)  
Antiguo 17/11/2012, 08:53
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Guardar imagenes en asp.net

Cita:
Iniciado por Aquaventus Ver Mensaje
Hola Darsk, porqué mejor no alojas las imágenes en el path de tu web? Porque alojar las imágenes en el servidor SQL no es recomendable... Que opinas estimado jhonwilliams?, salvo que sea un proyecto académico y te lo soliciten así. Nos cuentas!.Saludos!:arrib:.
Huy.... estas dando en el clavo Aquaventus y hay varios puntos.

1. El guardar las imagenes en la base de datos, hara que el tamaño de la misma cresca de una forma casi alarmante.

2. A nivel de ejercicio si el compañero Darsk logra terminar lo que esta haciendo, aprendera algo nuevo.

3. Me dicen que las ultimas versiones del SQL Server no estoy seguro si la 2008R2 o es la 2012 ya tienen un manejo mas eficiente del tema, algo asi como que el mismo se encargar de alojar la imagen en el disco duro y lo que hace es crear un puntero para recuperarla cuando se le solicita el dato. Seria investigar un poco mas el tema.


Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)

Etiquetas: imagenes, server, sql, tabla, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:18.