Avatar billede mlunde Nybegynder
21. november 2010 - 17:05 Der er 20 kommentarer og
1 løsning

Imagefield i Visual Studio 2010

Hej.
Jeg har uploadet et billede til min tabel i kolonnen "pic1".
Nu skal jeg have det vist i Detailsview. Hvordan gør jeg dette?

Mvh Michael
Avatar billede arne_v Ekspert
21. november 2010 - 17:20 #1
.NET Win Form ?
Avatar billede mlunde Nybegynder
21. november 2010 - 17:32 #2
Undskyld, jeg glemte at fortælle at jeg bruger Visual Studio Express 2010.
Jeg ved ikke hvad du mener med .net win form?
Burde jeg ikke kunne bruge ImageField? Jeg ved bare ikke hvordan.
Avatar billede Syska Mester
21. november 2010 - 17:53 #3
WebApp eller WinApp ?

Hvis WinApp ... Forms eller WPF.
Avatar billede mlunde Nybegynder
21. november 2010 - 17:58 #4
Jeg kender ikke til nogle af de to ting du spørger om ?
Avatar billede Syska Mester
21. november 2010 - 22:42 #5
Hmmm,

Hvad er du ved at lave ... en hjemmeside eller et windows program ?

( Det er hvad arne_v spørger om tror jeg )
Avatar billede mlunde Nybegynder
21. november 2010 - 22:46 #6
En hjemmeside :)
Avatar billede Syska Mester
21. november 2010 - 22:54 #7
Så skal du vel bare oprette et ImageField og så bind til den rigtige column i din table ?

Eller har du gemt billdet i databasen og ikke bare stien ?
Avatar billede mlunde Nybegynder
21. november 2010 - 22:56 #8
Jeg har gemt det i database. Det er meningen at man skal kunne oprette et produkt og der igennem også uploade et billede til.
Så der er ikke en sti som sådan, men det ligger i column der hedder "pic1"
Avatar billede Syska Mester
21. november 2010 - 23:03 #9
Jeg ville løbe skrigende væk fra det design ... :-) da databaser er en data ... og ikke filer.

Men der findes selvfølgelig en løsnign.

Du kan oprette en http handler ... og sende et ID med til den. Den kan så læse billedet ud ... og sende det tilbage.

http://byatool.com/ui/use-javascript-and-an-httphandler-to-load-an-image-from-a-database/

Og der var et link ... til en som faktisk gør det.

mvh
Avatar billede mlunde Nybegynder
21. november 2010 - 23:16 #10
Jeg vil da lige spørge, hvad du så mener med om jeg har gemt det i min tabel i #7?
Avatar billede Syska Mester
21. november 2010 - 23:32 #11
Binær data eller stien til hvor billedet er på din webserver. Du skrev du havde gemt det binært.

Databasen er langsom til håndtering af filer med mindre du bruger en ny feature som kom med i version 2008 og frem ...
Avatar billede arne_v Ekspert
22. november 2010 - 01:38 #12
Man kan skam godt hente en BLOB med en .aspx !

Der er bare lidt mindre overhead med en .ashx ...

Den med at filer er langsomme i databasen er 80% myte og 20% virkelighed.

Jeg ville ikke udelukke databasen førend der var konkrete performance målinger som sagde at det i det konkrete tilfælde gør en stor forskel.
Avatar billede bkp Nybegynder
22. november 2010 - 07:53 #13
Hmm, du siger ikke meget om hvilket sprog det skal skrives i, det ville hjælpe dig selv og andre meget hvis du giver lidt mere info om hvilken kode der skal ligge til grund for din hjemmeside, men hvis du vil f.eks. vil bygge det i ASP.Net C#, så kan dette måske  guide dig lidt på vej.

Dit Image object:
<asp:Image Runat="server" ID="m_Image" NAME="m_Image" />


I din codebehind:
m_Image.ImageUrl = "loadpicture.aspx?" + strID;


Udsnit af filen loadpicture.aspx:
MyCommand = new SqlCommand("SELECT pic1 FROM tablename WHERE id=" + Request["picid"], MyConnection);
MyConnection.Open();
MyReader = MyCommand.ExecuteReader();
if (MyReader.Read())
{
  byte[] m_MyImage = (byte[])MyReader["pic1"];
  Response.BinaryWrite(m_MyImage);
}


Ovenstående er kun brudstykker og kræver at du kender til ASP.Net m.m.
Avatar billede bkp Nybegynder
22. november 2010 - 07:55 #14
Rettelse:
m_Image.ImageUrl = "loadpicture.aspx?" + strID;

Skulle være:
m_Image.ImageUrl = "loadpicture.aspx?picid=" + strID;
Avatar billede Syska Mester
22. november 2010 - 11:31 #15
Som sagt, så er det i 2008 ligeså hurtig som et fil system i de test jeg har set. Det giver bare nogen udfordringer når man skal have det ud igen mange gange, da man ikke kan linke direkte til en SQL column, derfor jeg synes design valg var forkert.
Avatar billede mlunde Nybegynder
22. november 2010 - 12:08 #16
Men, er der andre måder hvorpå jeg simpelt kan oprette et produkt og samtidig uploade et billede, hvorefter jeg kan kalde det via GridView eller Detailsview?
Avatar billede Syska Mester
22. november 2010 - 12:24 #17
Den måde du gør nu er fin nok i mange sammenhænge ... dog ved jeg ikke hvordan den håndtere cache af det klientside, der skal man nok lige huske at sætte headers på sin handler.

Men ja ... smid billedet i en mappe på serveren ud fra nogen kriterier, så du kan genskabe URL til billede ud fra data i din row. På den måde kan du undgå at skulle lave din handler.

Men igen som arne_v siger, har du ikke performance problemer nu og er du din egen host, så har du nok evig plads i din DB, du skal jo bare tænke på at hosting firmaer typisk ikke giver ligeså meget DB plads ... som disk plads til filer, så her kan du løbe ind i et problem.

mvh
Avatar billede mlunde Nybegynder
22. november 2010 - 12:26 #18
Okay. Jeg vil dog lige sige, at jeg stadig er ny til det, så hvordan kan jeg genskabe min URL til billedet ud fra data?
Avatar billede Syska Mester
22. november 2010 - 12:34 #19
måske noget ala det her:
byte[] buffer = new byte[]; // Dit byte array fra databasen.
            Stream stream = new MemoryStream(buffer);
            Bitmap bitmap = new Bitmap(stream);
            bitmap.Save("/some/directory/filename.someext", ImageFormat.Jpeg);
Avatar billede mlunde Nybegynder
24. november 2010 - 16:34 #20
Hey buzzzz... skriv et svar og du får points :)
Avatar billede Syska Mester
24. november 2010 - 16:59 #21
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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