Как отобразить изображение вложения из базы данных access в picturebox - PullRequest
1 голос
/ 29 октября 2019

я пытаюсь отобразить изображение из базы данных. Вложения в картинке, но я получаю сообщение об ошибке

ImageByte = (byte[]) vcom.ExecuteScalar();

там написано

Невозможно привести объект типа 'System.String' квведите 'System.Byte []'.

вот мой код

byte[] ImageByte = null;
MemoryStream MemStream = null;

OleDbConnection cn = new OleDbConnection();
cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/ALL/Database7.accdb";
cn.Open();

OleDbCommand command = new OleDbCommand();
command.Connection = cn;
string sql = "select Attachments from Contacts where ID = 1";
OleDbCommand vcom = new OleDbCommand(sql, cn);

ImageByte = (byte[]) vcom.ExecuteScalar();

MemStream = new MemoryStream(ImageByte);
pictureBox1.Image = Image.FromStream(MemStream);
cn.Close();

1 Ответ

0 голосов
/ 29 октября 2019

В MSAccess двоичные данные вложений находятся в подэлементе поля Attachment.

Это вернет byte[]. Этот байт [] дополняется MSAccess, первые 20 байтов содержат MetaData.

Вы можете использовать Linq .Skip(), чтобы избавиться от этих первых 20 байтов

string sql = "select Attachments.FileData from Contacts where ID = 1";
OleDbCommand vcom = new OleDbCommand(sql, cn);

byte[] ImageByte = (byte[]) vcom.ExecuteScalar(); //contains 20 extra bytes

MemoryStream MemStream = new MemoryStream(ImageByte.Skip(20).ToArray()); //Read bytes starting at position 20

Image image = Image.FromStream(MemStream); //Will work now
pictureBox1.Image = image;
...

Это работает?

...