Avatar billede celinder Nybegynder
26. januar 2008 - 22:52 Der er 13 kommentarer og
1 løsning

inserte image i db/dataset

Jeg har en database vor jeg har en billed tabel.

Den indeholder en
Id (int)
BilledData (image)

jeg prøver så at inserte i den men bliver ved med at få samme fejl

Jeg gør følgende:

          ' Load FileUpload's InputStream into Byte array
            Dim imageBytes(UploadFile.PostedFile.InputStream.Length) As Byte
            UploadFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length)
            '    myCommand.Parameters.AddWithValue("@ImageData", imageBytes)




            Dim Vareadaptor2 As New Insert_VareTableAdapters.Billed_dataTableAdapter
            Dim m2 As Integer
            m2 = Integer.Parse(Pris.Text)
            Dim test As Integer = Vareadaptor2.InsertQuery(imageBytes)


Hvad gør jeg galt ?
Avatar billede arne_v Ekspert
26. januar 2008 - 22:55 #1
Skal du bruge en adapter ? Kan du ikke bare bruge en helt almindeli command som udfører
en INSERT ?
Avatar billede celinder Nybegynder
26. januar 2008 - 22:56 #2
net behøver ikke være en adaptor synes bare det virkere umiddelbart nemmere men det kan jo være jeg tager fejl
Avatar billede celinder Nybegynder
26. januar 2008 - 22:58 #3
nej behøver ikke være en adaptor skulle der have stået.....
Avatar billede karl-koder Nybegynder
26. januar 2008 - 23:03 #4
Har du overvejet at oploade dine billeder til en mappe på serveren og så smide en sti til billedet i din database/dataset i stedet ?

Jeg vil umiddelbart mene at belastningen bliver mindre ved ikke at gemme billedet i databasen, men det kan arne_v nok bedre svare på ;o)
Avatar billede celinder Nybegynder
26. januar 2008 - 23:06 #5
Det kunne jeg vel også gøre.... er det bedre ?
Avatar billede arne_v Ekspert
26. januar 2008 - 23:08 #6
Kode sekvens med SqlCommand INSERT:

        Dim imgfile As Stream = New FileStream ("C:\blue.jpg", FileMode.Open)
        Dim siz As Integer = imgfile.Length
        Dim imgdata(siz-1) As Byte
        imgfile.Read(imgdata, 0, imgdata.Length)
        imgfile.Close
        Dim ins As SqlCommand = New SqlCommand ("INSERT INTO imgtest VALUES(@id,@img)", con)
        ins.Parameters.Add("@id", SqlDbType.Int)
        ins.Parameters.Add("@img", SqlDbType.Image)
        ins.Parameters("@id").Value = 1
        ins.Parameters("@img").Value = imgdata
        ins.ExecuteNonQuery
Avatar billede karl-koder Nybegynder
26. januar 2008 - 23:17 #7
Efter min mening er det ikke smart med billeder gemt i databasen da dit dataset/array/list eller hvad du bruger med tiden vil blive voldsomt stort og da det er serveren der tager sig af det ville jeg vælge kun at ligge en sti i databasen og så lade clienten/browseren tage sig af at loade billedet, men det er jo bare min mening om det ;o)
Avatar billede celinder Nybegynder
26. januar 2008 - 23:18 #8
Det kan godt være det er bedre, det vil jeg nok prøve istedet.
Avatar billede arne_v Ekspert
26. januar 2008 - 23:19 #9
Der har i mange år været været en opfattelse af at det var en katastrofe at putte
billeder i databasen og at det var meget bedre at gemme billederne som filer og kun
gemme stien i databasen.

Jeg tror ikke på at det gælder med database og computere af idag. Jeg har et par gange lavet noget test af det og performance ved billeder i database var acceptabel. Og det
har klart administrative fordele.

Bedste argument idag for ikke at gøre det er web hoteller med 1GB diskplads men kun 5 MB database plads.
Avatar billede celinder Nybegynder
26. januar 2008 - 23:39 #10
ok men det virker det du skrev arne så kom gerne med et svar
Avatar billede celinder Nybegynder
26. januar 2008 - 23:51 #11
jeg bruger nu den anden metode med at gemme det i en folder.

Gør følgende:


            Dim filepath As String = UploadFile.PostedFile.FileName
            Dim pat As String = "\\(?:.+)\\(.+)\.(.+)"
            Dim r As Regex = New Regex(pat)
            'run
            Dim m2 As Match = r.Match(filepath)
            Dim file_ext As String = m2.Groups(2).Captures(0).ToString()
            Dim filename As String = m2.Groups(1).Captures(0).ToString()
            Dim file As String = filename & "." & file_ext

            'save the file to the server
            UploadFile.PostedFile.SaveAs(Server.MapPath("..\UploadPhoto\") & file)
            '  lblStatus.Text = "File Saved to: " & Server.MapPath(".\") & file

BAre hvis der er en anden der en dag finder dette....

Arne vil du ikke have point ?
Avatar billede karl-koder Nybegynder
26. januar 2008 - 23:52 #12
arne_v >> Jeg mener heller ikke det er en katastrofe, men jeg vedligeholder pt. en stor internet shop hvor vi har lavet nogle test på det, her er der tale om 5000+ produkter med hver 1 lille og 3 store billeder.

Og der er klart forskel i hastigheden på at loade billeder fra database kontra fra disk.
Avatar billede arne_v Ekspert
27. januar 2008 - 00:12 #13
svar
Avatar billede arne_v Ekspert
27. januar 2008 - 00:16 #14
Jeg lavede bl.a. en lille test med 25 KB billeder.

Resultatet var:

File (1 threads): 1,9 get per second
File (10 threads): 2,1 get per second
File with web app cache (1 threads): 16,8 get per second
File with web app cache (10 threads): 17,8 get per second
File directly by web server (1 threads): 17,6 get per second
File directly by web server (10 threads): 20,1 get per second
Database (1 threads): 10,7 get per second
Database (10 threads): 11,6 get per second
Database with web app cache (1 threads): 17,1 get per second
Database with web app cache (10 threads): 19,5 get per second
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