C sharp - Mostrar imagen desde base de datos access

 
Vista:

Mostrar imagen desde base de datos access

Publicado por Erick (3 intervenciones) el 18/06/2015 17:31:40
Saludos,

Queria pedirles ayuda con un problema que estoy teniendo al intentar mostrar una imagen en un pictureBox que ya la tengo guardada en una base de datos access 2010, el codigo que realice es el que se encuentra lineas abajo, el problema esta en la linea donde destaco el error y lo que me sale es "Parameter is not valid" , no se que pueda estar haciendo mal, estoy programando con Visual Studio 2008 .

Agradesco de antemano el apoyo que me puedan brindar para solucionar este problema.

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

string MAQ = "TABLA";
OleDbCommand comm = new OleDbCommand("SELECT IMAGEN" +
" FROM " + MAQ + " where Id = 16", CONEXION);

CONEXION.Open();

OleDbDataReader dr = null;

dr = comm.ExecuteReader();

byte[] aBytes = null;

if (dr.Read())
{
aBytes = (byte[])dr.GetValue(0);

}

CONEXION.Close();

dr.Close();

MemoryStream ms = new MemoryStream();

ms.Write(aBytes, 0, aBytes.Length);

pictureBox1.Image = Image.FromStream(ms); ERROR (Parameter is not valid.)

ms.Close();


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

Atte. Erick C.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Mostrar imagen desde base de datos access

Publicado por David (60 intervenciones) el 18/06/2015 20:37:26
Después de la línea

1
ms.Write(aBytes, 0, aBytes.Length);

Te falta

1
ms.Position = 0;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar imagen desde base de datos access

Publicado por Erick (3 intervenciones) el 18/06/2015 22:20:53
Hola David,

Acabo de probar añadiendo la linea

ms.Position = 0;

pero me sigue dando el mismo error en el mismo punto del codigo.


Saludos,
Atte. Erick
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mostrar imagen desde base de datos access

Publicado por David (60 intervenciones) el 18/06/2015 23:37:05
De qué tipo es el campo en la BB.DD?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar imagen desde base de datos access

Publicado por Erick (3 intervenciones) el 19/06/2015 14:34:06
El campo en la Base de datos es "Objeto OLE" , la imagen que he insertado es imagen de mapa de bits.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mostrar imagen desde base de datos access

Publicado por omar (10 intervenciones) el 19/06/2015 14:55:23
Debes convertir el campo imagen que es de bite a tipo imagen y mostrarlo al picture box o a filas de un datagridview
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mostrar imagen desde base de datos access

Publicado por Carlos (35 intervenciones) el 19/06/2015 20:52:53
Hola erick, lellendo tu codigo por encima, no parece haber ningun problema, aunque no hay necesidad de usar el writer de memorystream para hacer esto, ya que tu perfectamente puedes hacer asi:

MemoryStream ms = new MemoryStream(aBytes);

aunque esto no debe ser el problema, probablemente el problema esta en que a la hora de guardar la imagen en la base de datos no se guardo correctamente y luego al tratar de obtenerla los bytes no se escriben correctamente, aqui debajo te dejo dos bloques de codigo que te pueden ayudar, uno es para salvar la imagen corectamente y el otro para obtenerla, ten en cuenta que primero que todo el campo donde deseas almacenarla en la BD, debe ser de tipo OLE Object. El formato de la imagen puede ser cualquiera, de hecho OLE Object te sirve para guardar cualquier tipo de archivo ya que OLE Object no es mas que binario.

aqui va el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//para salvar la imagen
 public void SaveImage(Bitmap image)
        {
            string query = "INSERT INTO [Table]([Image]) VALUES (@image)";
 
            MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Bmp);
            byte[] buffer = ms.ToArray();
            ms.Close();
 
            OleDbCommand command = new OleDbCommand(query, connection);
            command.CommandType = CommandType.Text;
            command.Parameters.AddWithValue("@image", buffer);
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
            command.Dispose();
        }
 
 
//para obtener la imagen
public Bitmap GetImage()
        {
            string query = "SELECT Image FROM [Table]";
 
            OleDbCommand command = new OleDbCommand(query, connection);
            command.CommandType = CommandType.Text;
            connection.Open();
            OleDbDataReader reader = command.ExecuteReader();
            reader.Read();
            byte[] buffer = (byte[])reader["Image"];
            reader.Close();
            connection.Close();
            command.Dispose();
 
            MemoryStream ms = new MemoryStream(buffer);
            Bitmap image = new Bitmap(ms);
            ms.Close();
 
            return image;
        }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar imagen desde base de datos access

Publicado por Felix Ceregatti (1 intervención) el 10/12/2019 21:20:02
Muy agradecido con la pregunta, ya que era la misma que tenia y por supuesto con las respuesta cada una con su aportación pude resolver mi problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar