Avatar billede dava Nybegynder
02. oktober 2004 - 17:07 Der er 12 kommentarer og
1 løsning

Billede fra MySQL BLOB til PictureBox

Hvordan henter man billeddata der er gemt i MySQL i et BLOB felt ind således at det kan vises direkte i en PictureBox?

Er der nogen der kan hjælpe mig på rette vej?
Avatar billede arne_v Ekspert
02. oktober 2004 - 17:19 #1
Du henter vel data ud af databasen, creater et Image objekt fra det
og assigner det til PictureBox'ens Image property ?
Avatar billede dava Nybegynder
02. oktober 2004 - 17:26 #2
Øhh... Jo det er lige det.
- Jeg kan ikke regne ud hvad der skal til for at hente data ud fra databasen og så få det gemt i et image objekt.
Avatar billede dava Nybegynder
02. oktober 2004 - 17:27 #3
Det der helt konkret volder mig problemer er DataReader.GetBytes() som jeg formoder er det rette værktøj til denne opgave...
Avatar billede arne_v Ekspert
02. oktober 2004 - 17:40 #4
Hvis du bruger GetBytes() har du en byte[] som du kan wrappe
i en MemoryStream og loade med FromStream.
Avatar billede arne_v Ekspert
02. oktober 2004 - 17:42 #5
Noget a la:

pb.Image = Image.FromStream(new MemoryStream(rdr.GetBytes()));
Avatar billede dava Nybegynder
02. oktober 2004 - 17:55 #6
tak - jeg håber at jeg når så langt ;)
- indtil videre kæmper jeg dog med at læse BLOB'en ind i et byte-array.
Avatar billede arne_v Ekspert
02. oktober 2004 - 18:10 #7
Kan du ikke få rdr.GetBytes() til at virke ?
Avatar billede dava Nybegynder
02. oktober 2004 - 18:26 #8
nej - jeg får ubrugelige data ud - men jeg sidder også og hacker lidt i blinde.
Det er de her linier jeg sidder og arbejder med - ved godt at de HELT sikkert ikke virker sådan som de står nu (det nogle linier fra Help) - er bare copy/pastet direkte fra VS.


cmd.CommandText = "SELECT file FROM pictures WHERE id = " + book.PictureId;
cmd.Connection = conn;
dr = cmd.ExecuteReader();
dr.Read();

int bufferSize = 100;
byte[] outbyte = new byte[bufferSize];
long retval;
long startIndex = 0;
retval =(long) dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
//boxPicture.Image = Image.FromStream(new MemoryStream(dr.GetBytes()));

dr.Close();
conn.Close();

- Jeg kan ikke gennemskue hvordan parameterne for GetBytes skal stykkes sammen.
Måske der kan gives et eksempel...? :)
Avatar billede dava Nybegynder
02. oktober 2004 - 18:31 #9
De fleste af de artikler og help-tekster jeg kan finde beskriver hvordan man gemmer en blob i en fil - og jeg er nok lidt for newbie til at gennemskue hvordan man skipper fil-skrivningen og istedet laver et image objekt.
Derudover ser det ud til at det heller ikke er så'en lige til at GetBytes() på en mysql connection.
Avatar billede arne_v Ekspert
02. oktober 2004 - 19:03 #10
MySqlCommand sel = new MySqlCommand("SELECT pic FROM pics WHERE id = " + id, con);
        byte[] data = (byte[])sel.ExecuteScalar();
Avatar billede arne_v Ekspert
02. oktober 2004 - 19:04 #11
Vigtigt: der er en bug i ByteFX for BLOB'er større end 64KB
Avatar billede dava Nybegynder
02. oktober 2004 - 22:15 #12
YES!
Nu var den der endelig... tak for hjælpen, selvom det var lidt af en lærerig udfordring ;)
Jeg brugte ikke ByteFX men det gør jeg nu, nice.
Og den der med at bruge ExecuteScalar var et godt praj i den rigtige retning
- sammen med den her KB artikel http://support.microsoft.com/default.aspx?scid=kb;en-us;321900 som jeg selvfølgelig først har fundet nu...
Anyway, koden ser nu således ud:

cmd.CommandText = "SELECT file FROM pictures WHERE id = " + book.PictureId;
cmd.Connection = conn;
byte[] data = (byte[])cmd.ExecuteScalar();
MemoryStream ms = new MemoryStream(data);
pictureBox.Image = Image.FromStream(ms);

- og det kører efter planen.

Endnu engang tak for hjælpen Arne, giver du et svar?
Avatar billede arne_v Ekspert
02. oktober 2004 - 22:16 #13
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester