variable una tipo que mostrar imagen guardar datos dato consultar como c# ms-access picturebox

mostrar - que tipo de dato es una imagen en c#



Lee una imagen de Access DB en PictureBox (5)

He intentado leer una imagen guardada en Access DB como un objeto OLE en un PictureBox en una aplicación de Windows C #.

El código que hace esto se presenta a continuación:

string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/Rajesh/SampleDB_2003.mdb;"; OleDbConnection oConn = new OleDbConnection(connString); oConn.Open(); string commandString = "select * from employee where id = " + id + ""; OleDbCommand oCmd = new OleDbCommand(commandString, oConn); OleDbDataReader oReader = oCmd.ExecuteReader(CommandBehavior.SequentialAccess); while (oReader.Read()) { txtID.Text = ((int)oReader.GetValue(0)).ToString(); txtName.Text = (string)oReader.GetValue(1); txtAge.Text = ((int)oReader.GetValue(2)).ToString(); txtType.Text = (string)oReader.GetValue(3); byte[] imageBytes = (byte[])oReader.GetValue(4); MemoryStream ms = new MemoryStream(); ms.Write(imageBytes, 0, imageBytes.Length); Bitmap bmp = new Bitmap(ms); pbPassport.Image = bmp; }

Cuando ejecuto el código anterior, se lanza una excepción ''El parámetro no es válido'' en la línea:

Bitmap bmp = new Bitmap(ms)

Del mensaje de excepción, está claro que ''ms'' está en un formato que no es reconocible. ¿Alguna sugerencia para superar esto?


Desafortunadamente no tengo una buena respuesta para ti, pero puedo decirte que cuando lo intenté obtuve los mismos resultados. A veces, al omitir los primeros 78 bytes de la matriz de bytes funcionaba, a veces no funcionaba.

Esto se debe a que el tipo de datos Objeto OLE almacena algún tipo de encabezado en el campo, por lo que Access sabe qué tipo de Objeto OLE es. No pude encontrar una manera confiable de averiguar exactamente dónde se detuvo este encabezado y comenzaron los datos reales, pero también me rendí, así que buena suerte :)


Tu bytestream está dañado de alguna manera, porque probé el método exacto tuyo pero llené la matriz de bytes con datos PNG de un archivo.

Sugiero crear dos flujos, uno de la base de datos y otro del archivo que fue el origen de la imagen en la base de datos. Luego, compáralos byte por byte. Si hay incluso un byte de diferencia, los datos de imagen de la base de datos están corruptos.


Haz una búsqueda en Google de AccessHdr. Encontrará referencias a AccessHdr.cpp y AccessHdr.h. Estos ilustrarán lo que se necesita para extraer las secuencias sin el encabezado.


Puedes probar:

pbPassport.Image = Image.FromStream(ms);


No puede leer objetos OLE tan fácilmente. De hecho, es una mala práctica mantener las imágenes como objetos OLE en la base de datos.

Se prefiere tener em como objetos BLOB o ruta y nombre de archivo en algún almacenamiento. AccessImagine puede manejar ambos escenarios para MS Access y C #. Puede descargarlo aquí - http://access.bukrek.net