mboost-dp1

Asp.net billede fra mssql tabel


Gå til bund
Gravatar #1 - slemmebirk
25. jul. 2008 16:15
Har siddet og lavet lidt kode til at gemme et billede og en thumbnail af billedet i en mssql tabel. udfra dette tutorial. Det er da også lykkedes mig at få billedet hentet ud af tabellen og vist det på en side hvor content type er sat til Image/JPEG. Dog kun i .NET 3.5. Da det webhotel jeg anvender kun understøtter .NET 2.0 lavede jeg det om til 2.0 og her er det så tingene begynder at gå galt. Jeg har søgt lidt på nettet og de løsninger jeg kan finde ser ikke ud til at fungere! her er min kode:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Response.ContentType = "Image/JPEG"

Dim Conn As SqlConnection = New SqlConnection(Resource.ConnectionString)

Dim Cmd As SqlCommand = Conn.CreateCommand

Try
Conn.Open()

Cmd.CommandText = "SELECT * FROM Images WHERE ID=@ID"

Cmd.Parameters.AddWithValue("@ID", "69a79896-6a20-4aa1-9827-0460f69bf094")

Dim dr As SqlDataReader = Cmd.ExecuteReader

While dr.Read

Response.BinaryWrite(dr.Item(2))

End While

Catch ex As Exception

Response.Write(ex.Message)

Finally

If Conn.State = Data.ConnectionState.Open Then Conn.Close()

End Try

End Sub



fejlen jeg får er "Det angivne argument lå uden for det gyldige værdiområde. Parameternavn: offset", og kommer ved linien Response.BinaryWrite(dr.item(2)) dr.item(2) i mssql tabellen er et felt som hedder billede og typen er image.. har svært ved at se hvad jeg gør galt, så håber på lidt hjælp på forhånd tak!
Gravatar #2 - arne_v
25. jul. 2008 16:49
Er image i tredie kolonne som dr.Item(2) forventer ?
Gravatar #3 - slemmebirk
25. jul. 2008 18:51
ja det er det
0. id
1. navn
2. billede
3. thumb
Gravatar #4 - arne_v
25. jul. 2008 19:07
Prøv evt. med:

Cmd.CommandText = "SELECT billede FROM Images WHERE ID=@ID"

og:

dr.Item(0)

LOB felter er lidt specielle.

(iøvrigt bør der vel kunne bruges ExecuteScalar)
Gravatar #5 - slemmebirk
25. jul. 2008 19:12
prøver jeg lige, hvordan kan jeg bruge ExecuteScalar, i den sammenhæng, er aldrig lykkedes mig at få det til at funke hehe?
Gravatar #6 - slemmebirk
25. jul. 2008 19:13
Samme fejl :/
Gravatar #7 - Acro
25. jul. 2008 20:19
Jeg har lige et par kommentarer, der dog ikke knytter sig direkte til dit problem.

1 skrev:
Har siddet og lavet lidt kode til at gemme et billede og en thumbnail af billedet i en mssql tabel.


Har du en god grund til at ville gemme billeder i din database? Filsystemet er langt bedre til at håndtere den slags, ligesom det gør fx backup særdeles lettere.

1 skrev:
Dog kun i .NET 3.5. Da det webhotel jeg anvender kun understøtter .NET 2.0 lavede jeg det om til 2.0


Du kan sagtens afvikle .NET 3.5 på dit webhotel. Det er nemlig kun udvidelser til .NET 2.0, så det kræver blot, at du uploader de relevante filer (System.Core.dll, System.Data.Linq.dll og hvad du ellers bruger; den bør selv brokke sig).

Filerne finder du i C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 og skal blot placeres i din /bin-mappe.
Gravatar #8 - themuss
25. jul. 2008 20:25
quoted for emphasis
Har du en god grund til at ville gemme billeder i din database? Filsystemet er langt bedre til at håndtere den slags, ligesom det gør fx backup særdeles lettere.
Gravatar #9 - slemmebirk
26. jul. 2008 11:08
Har du en god grund til at ville gemme billeder i din database? Filsystemet er langt bedre til at håndtere den slags, ligesom det gør fx backup særdeles lettere.


nej ikke andet end jeg umiddelbart ville mene at det var en nemmere måde at gøre det på hvis det virkede. Altså i stedet for at have en sql tabel der holder styr på data fra nogle mapper, så ligger det bare direkte i sql tabellen sammen info om billederne.
Gravatar #10 - slemmebirk
26. jul. 2008 17:06
så lykkedes det sku, viste sig at fejlen lå i koden til at gemme billederne i databasen!! tak for hjælpen alle sammen :)
Gravatar #11 - arne_v
27. jul. 2008 01:56
#10

Fint nok.

Men jeg undrer mig nu stadig over hvorfor du fik den fejl du fik.
Gravatar #12 - arne_v
27. jul. 2008 02:00
7 skrev:
Har du en god grund til at ville gemme billeder i din database? Filsystemet er langt bedre til at håndtere den slags, ligesom det gør fx backup særdeles lettere.


Den med at fil systemet er bedre til at gemmer filer er efter min bedste overbevisning en myte som baserer sig på fakta tilbage fra Access 2.0 & 95 tiden.

Det børe være åbenlyst at det er langt nemmere at lave en samlet backup fremfor at lave to forskellige backups.
Gravatar #13 - arne_v
27. jul. 2008 02:27
7 skrev:
Du kan sagtens afvikle .NET 3.5 på dit webhotel. Det er nemlig kun udvidelser til .NET 2.0, så det kræver blot, at du uploader de relevante filer (System.Core.dll, System.Data.Linq.dll og hvad du ellers bruger; den bør selv brokke sig).

Filerne finder du i C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 og skal blot placeres i din /bin-mappe.


Compileren vil stadig være den der kom med 2.0, så al kode skal
compiles ikke noget App_Code og src ref.

Og så er der SP1 roderiet.

Måske ikke umuligt, men man skal nok have lidt styr på tingene inden man kaster sig ud i det hack.
Gravatar #14 - Acro
27. jul. 2008 10:03
12 skrev:
Den med at fil systemet er bedre til at gemmer filer er efter min bedste overbevisning en myte som baserer sig på fakta tilbage fra Access 2.0 & 95 tiden.


Der er mange argumenter for ikke at bruge databasen til filer. Primært at den ikke er beregnet til det, og du ikke har nogle åbenlyse fordele af at gemme filer i forbindelse med din metadata, hvis du bare kan designe en god arkitektur.

Andre argumenter er dog pladsforbruget, der alt andet lige og typisk bliver større, når du pakker et lag udover. Det vigtigste argument er dog nok ydelse, idet du får et væsentligt spild, hvis du ikke kan lade din server håndtere filer direkte, men skal initialisere en databaseforbindelse, vælge objektet og returnere det. Selvfølgelig kan det optimeres, men jeg er ret sikker på, at fx Flickr gemmer filer fysisk. Det er simpelthen tåbeligt andet. Filsystemet er optimeret til den proces.

12 skrev:
Det børe være åbenlyst at det er langt nemmere at lave en samlet backup fremfor at lave to forskellige backups.


Hvis du kun måler backup i, hvor let det er at konfigurere, har du ret. Det er bare sjældent tilfældet. En backup skal jo også gerne være funktionel, hvis uheldet er ude, og det kan det være af flere årsager. Hvis du bare skal gendanne alt fra kopien, er din løsning også lettest, men hvis du skal ind og gendanne en specifik fil uden at berøre andre data, er det med værktøjer som fx Tivoli noget lettere, når filen er fysisk.

13 skrev:
Compileren vil stadig være den der kom med 2.0, så al kode skal
compiles ikke noget App_Code og src ref.

Og så er der SP1 roderiet.

Måske ikke umuligt, men man skal nok have lidt styr på tingene inden man kaster sig ud i det hack.


Jeg er også stor fortaler for, at man ikke anvendes Web Site, når man kan anvende Web Application Project. Det er selvfølgelig en smagssag, hvordan man vægter fordele og ulemper, men det muliggør mit forslag. Det er i hvert fald ikke første gang, jeg anbefaler den løsning.
Gravatar #15 - slemmebirk
27. jul. 2008 10:54
måske lidt off topic, men nogen der har en god idé til hvordan jeg får hentet noget data ud i en tabel så det kommer til at se sådan her ud:

<table>
<tr>
<td>data1</td>
<td>data2</td>
<td>data3</td>
<td>data4</td>
</tr>
<tr>
<td>data5</td>
<td>data6</td>
<td>tom</td>
<td>tom</td>
</tr>
</table>

har ingen idé om hvad jeg skal søge efter på google
Gravatar #16 - Windcape
27. jul. 2008 15:06
Loops (iterations) plejer at virke. Det ved du forhåbenlig godt hvad er?

Modolus er godt til at bestemme hvornår der skal laves rækker, istedet for kolonner.
Gravatar #17 - themuss
27. jul. 2008 15:09
I forlængelse af #14

En DB-backup laves vel af den fysiske struktur? Eller har du tænkt dig at lave et træk af hele lortet for at lave backup? Lyder en anelse CPU-intensivt.

Nøj stakkels database-servere rundt omkring.
Gravatar #18 - slemmebirk
27. jul. 2008 18:14
#16
Ja har jeg styr på :)

mente bare der var en web control i visual studio der kunne udføre det samme noget nemmere
Gravatar #19 - Windcape
27. jul. 2008 19:44
*slår slemmebirk i hovedet med en stav*

Hvis du designer UI til websider i Visual Studio skal du have dummeslag til du aldrig mere gør det igen.

HTML er ikke designet til Visual Editing, du skal håndkode det!
Gravatar #20 - arne_v
6. aug. 2008 02:31
14 skrev:

Der er mange argumenter for ikke at bruge databasen til filer. Primært at den ikke er beregnet til det,


Databaser er beregnet til at hive data ud af. De fleste databaser understøtter LOB data typer op til ca. 2 GB.

Jeg gætter på at funktionaliteten er der med beregnethed på at blive brugt.

Har du overvejet hvorfor et firma som Oracle tilbyder et fil system implementeret ovenpå en database (Oracle CM SDK tidligere kaldet IFS) ?

MS forsøgte at lave det samme med WinFS. Omend det jo ikke blev til noget.

14 skrev:

og du ikke har nogle åbenlyse fordele af at gemme filer i forbindelse med din metadata,


Transactional integrity og nemmere administration er åbenlyse fordele.

14 skrev:

Andre argumenter er dog pladsforbruget, der alt andet lige og typisk bliver større, når du pakker et lag udover.


Umiddelbart finder jeg det ikke indlysende at:

BLOB overhead > fil ref + fil overhead

14 skrev:

Det vigtigste argument er dog nok ydelse, idet du får et væsentligt spild, hvis du ikke kan lade din server håndtere filer direkte, men skal initialisere en databaseforbindelse, vælge objektet og returnere det. Selvfølgelig kan det optimeres,


Det er jo det traditionelle argument mod filer i database. Jeg synes bare ikke at virkeligheden matcher.

Og det er faktisk dyrere at åbne en fil på disk end det er at låne en database connection fra connection pool !

14 skrev:

men jeg er ret sikker på, at fx Flickr gemmer filer fysisk. Det er simpelthen tåbeligt andet.


Jeg ved ikke hvad Flickr bruger. De bruger næppe en standard database. Da de må have flere PB data.

Jeg tror heller ikke at de gemmer filene i et enkelt fil system og path i en database. Det vil slet ikke skalere i den målestok.

Med stor sandsynlighed har de en custom løsning. Og så kan vi diskutere om den custom løsning er en database eller ej.

14 skrev:

Hvis du kun måler backup i, hvor let det er at konfigurere, har du ret. Det er bare sjældent tilfældet. En backup skal jo også gerne være funktionel, hvis uheldet er ude, og det kan det være af flere årsager. Hvis du bare skal gendanne alt fra kopien, er din løsning også lettest, men hvis du skal ind og gendanne en specifik fil uden at berøre andre data, er det med værktøjer som fx Tivoli noget lettere, når filen er fysisk.


Generelt har jeg ikke meget fidus til "vi har fundet en fejl og nu laver vi en restore af den del af data og så regner vi med at alle data er konsistente" filosofien.
Gravatar #21 - Cyrack
6. aug. 2008 06:30
arne_v: Nu hvor du er ved at kommentere på databaser kunne du måske svare på de sidste spørgsmål der kom til dig i den sidste tråd omhandlende billeder i databaser (Fordele og ulemper ved at gemme binær data i en database)?
Gravatar #22 - arne_v
6. aug. 2008 16:32
#21

Jeg lavede også en test med 250 KB filer.

Resultatet var at alt tog lige lang tid. Tilsyneladende var overheadet ved alle løsninger minimalt i forhold til det at læse de 250 KB op og skovle dem ud.

Jeg ville meget gerne poste tallene. Men jeg gemte dem ikke dengang. Og af en eller anden grund kører testen ustabilt på min PC nu (jeg har opdateret både HW og SW siden). Og en test hvor et antal requests fejler er ikke så overbevisende.
Gravatar #23 - myplacedk
6. aug. 2008 16:47
19 skrev:
HTML er ikke designet til Visual Editing, du skal håndkode det!

Der findes rigtigt meget software, som genererer ufatteligt dårligt HTML. Men der findes altså også software, som genererer ganske pæn HTML. Måske ikke perfekt, men acceptabelt.

Hvilken kategori den nævnte software hører i, aner jeg så ikke.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login